1.创建表

mysql> create table t_address(
-> id int primary key auto_increment, // 设置id为主键,自动增值
-> bookid int,
-> address varchar(100),
-> note_address varchar(100),
-> foreign key(bookid) references t_book(id) // 设置bookid为外键,引用到t_book表中的id字段
-> );

通过复制表的方式快速创建表

mysql> create table t_copy as select * from t_booktype where id=0;  //这里给一个不存在的id的值,那么得到的新表只是复制了不包括约束的原表结构,没有复制数据

mysql> create table t_copy as select * from t_booktype;  //复制了不带约束的表结构和全部数据

mysql> create table t_authors as select authors from t_book where authors like '%richard%';

mysql> create table t_copy like t_booktype;  // 复制原表结构和约束,但是没有数据

常用的数据类型:

varchar 可变长度字符串,可根据实际数据长度动态分配空间,最长255个字符(可存255个汉字或数字?)。

char 定长字符串,不会动态分配空间,速度快,但是会导致空间浪费,最长255个字符。

int 整数,最长11

bigint 长整型

float 单精度浮点型

double 双精度浮点型

date 短日期

datetime 长日期

clob (character large object) 字符大对象,最多可以存储4G字符串。

blob (binary large object) 二进制大对象,声音、图片、视频等,需要IO流插入数据。

常见表的约束:

not null 非空约束,属于列级约束,只能加在字段后面

unique 唯一性约束,但可以包含多个null,属于表级约束,与列级约束见下文所述例子

create table t_user(
    id int,
    name varchar(32) not null,  // 列级约束
    birth date,
    create_time datetime,
    unique(id,name)  // 表级约束,多个字段添加某种约束
)

primary key 主键约束,每张表都应该有一个主键,不一定非得是关键字段用来当主键,只要能突出not null+unique即可,所以“id int primary key auto_increment,"这句话在创建表的时候用到就好了。主键不建议使用varchar类型,并且也不建议使用复合主键。

foreign key 外键约束。比如有一张记录书籍信息的表,还有一张记录书籍类别的表,每一本书都属于某一种类别。这时书籍的表是子表,书籍类别的表是父表。子表中的外键引用父表中的字段,这个字段不一定是主键,但是需要具有唯一性。创建表时先创建父表,再创建子表;插入数据时先插入父表数据,再插入子表数据。子表中插入数据时,如果插入的是父表中没有的类别,那么会报错。删除表时则先删子表,再删父表。

PS:如果两张表之间有多对多的关系,例如学生和老师,每个学生有多个老师,每个老师教多个学生,那么可以在学生和老师之间增加一个关系表,用于记录两者之间的关系。

2.更改表

a.增加字段

mysql> alter table t_copy add column property varchar(20) after booktype;

mysql> alter table t_copy add column property1 varchar(20),
-> add column property2 varchar(20);

b.删除字段

mysql> alter table t_copy drop column property1,
-> drop column property2;

c.更改字段类型

mysql> alter table t_copy modify column property int;

d.给字段添加外键约束

mysql> alter table t_copy add foreign key(property) references t_book(id) on delete cascade;

e.删除字段的外键约束

可以先用show create table t_copy\G 查询到想要删除的外键约束的名称。

mysql> show create table t_copy\G
*************************** 1. row ***************************
Table: t_copy
Create Table: CREATE TABLE `t_copy` (
`id` int NOT NULL DEFAULT '0',
`booktype` varchar(50) DEFAULT NULL,
`property` int DEFAULT NULL,
KEY `property` (`property`),
CONSTRAINT `t_copy_ibfk_1` FOREIGN KEY (`property`) REFERENCES `t_book` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

mysql> alter table t_copy drop constraint t_copy_ibfk_1;

f.将表A的a字段赋值给表B的b字段

mysql>update A join B on A.id=B.Aid set A.a=B.b;

3.删除表

mysql> drop table if exists t_copy;

MySQL创建表、更改表和删除表的更多相关文章

  1. MySQL创建数据库 easyShopping,包括area表、goods表、customer表、orders表、ordersdetall表、test表

    MySQL创建数据库 easyShopping,包括area表.goods表.customer表.orders表.ordersdetall表.test表 商品表表结构: 字段名 说 明 类 型 长 度 ...

  2. 创建mysql数据库,在新数据库中创建表,再尝试删除表

    创建之前,先登录数据库存 mysql -u 账号 -p密码 登录完成后,展示一下已存在的数据库 show databases; 创建数据库 create database test111; 然后展示一 ...

  3. mysql 如何修改、添加、删除表主键

    在我们使用mysql的时候,有时会遇到须要更改或者删除mysql的主键,我们能够简单的使用alter table table_name drop primary key;来完成.以下我使用数据表tab ...

  4. mysql语句3-插入、修改删除表

    二.DML数据操纵语句 关键字:insert(插入)  delete(删除)  update(更新)  select(查询) 1.表创建好以后,就可以插入记录了,语法如下: 方法一 :insert i ...

  5. SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

    创建数据库: CREATE DATABASE Test --要创建的数据库名称 ON PRIMARY ( --数据库文件的具体描述 NAME='Test_data', --主数据文件的逻辑名称 FIL ...

  6. Mysql命令增加、修改、删除表字段

    alter add 命令用来增加表的字段: alter add命令格式:alter table 表名 add字段 类型 其他:如下所示: ) comment '单位' alter drop 命令删除表 ...

  7. oracle 删除用户,表空间;循环删除表

    select * from dba_tablespaces 说明:查看所有表空间 ----------------------------------------------------------- ...

  8. MySQL创建用户、授权、删除

    1.在MySQL中创建新用户 使用具有shell访问权限的root用户登录MySQL服务器并创建名为“rahul”的新用户.下面的命令只允许从localhost系统访问用户rahul的MySQL服务器 ...

  9. Mysql 创建普通用户、数据库、表、插入记录,用户赋权

    C:\phpStudy\MySQL\bin>mysql -uroot -proot -h127.0.0.1 //创建用户 mysql> insert into mysql.user (ho ...

  10. MySql新增表的字段,删除表字段

    1增加两个字段: create table id_name(id int,name varchar(20));//创建原始数据表 alter table id_name add age int,add ...

随机推荐

  1. es6中的导入与导出

    参考:https://www.cnblogs.com/sherrycat/p/11152994.html

  2. golang中数组指针与指针数组的区别实现

      指针数组和数组的指针,指的是两个不同的东西. 指针数组是有指针组成的数组,数组的指针是一个数组的指针. package main import "fmt" const MAX ...

  3. python3爬虫超简单实例

    网站入口:http://wise.xmu.edu.cn/people/faculty 爬取信息:姓名和主页地址 python版本:3.5 import requests r = requests.ge ...

  4. python函数关键字实参传参

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...

  5. SAP下载报表速度慢?为啥你不试试python多线程

    由于SAP系统自身原因,或者公司内部ABAP代码的算法效率不高,我们经常遇到,手工执行某个事务代码下载某个报表会非常耗时,小爬曾见过公司某个自开发的报表,单家公司的数据下载超过半小时.如果我们刚好接到 ...

  6. 记录常见的问题:encodeURICompnent 解码过程中出现空格 以及 第三方app中使用schema 唤起app

    window.location.href 跳转的时候使用了encodeURIComponent编码了部分参数,但是在第三方app中出现了编码过后的参数换行和空格的情况(部分第三方应用或者java程序) ...

  7. 【转】Nestable可拖拽树

    原文地址:https://blog.csdn.net/wangmj518/article/details/81746523 Nestable是基于Bootstrap的一个可拖拽的树结构表现插件. 下面 ...

  8. 入门 - k8s伸缩应用程序 (六)

    目标 使用 kubectl 伸缩应用程序. Scaling(伸缩)应用程序 在之前的文章中,我们创建了一个 Deployment,然后通过 服务 提供访问 Pod 的方式.我们发布的 Deployme ...

  9. Nodejs中调用系统命令、Shell脚本的方法和实例

    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/ch ...

  10. Java线程--CountDownLatch使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11867656.html Java线程--CountDownLatch使用, 代码里头有详细注释 ...