1.数据类型

1.1整型INT

tinyint、smallint、mediumint、int、bigint
数据类型 最小值 最大值
TINYINT(n) -128 127
SMALLINT(n) -32768 32767
MEDIUMINT(n) -8388608 8388607
INT(n) -2147483648 2147483647
BIGINT(n) -9223372036854775808 9223372036854775807
注意:

整型显示宽度:类型后面小括号内数字是显示最小宽度,不能限制插入数值的大小

如:int(2)---->表示输入int类型的值最小显示宽度为2,即输入各位数如1,则前面自动补0,实际显示01,也可以输入999,因为它是最小宽度,不是数值大小

整型类型的数值范围计算公式:

TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分别使用8,16,24,32,64位存储空间

存储的值的范围从-2^(n-1)到2^(n-1)-1,其中n是存储空间的位数。

unsigned修饰符:不允许负值,可以让正数上限提高一倍,即2^(n-1)+2^(n-1)-1

1.2浮点类型FLOAT

FLOAT(M,D):M表示总数位,D表示小数位

ps:FLOAT(5,3)表示一共5位数(不算小数点),小数显示3位,整数只能<=2位(超出报错),会四舍五入

1.2.3浮点数类型与定点数类型的区别

1.3字符串类型CHAR&VARCHAR

CHAR和VARCHAR
CHAR VARCHAR
定长字符串 不定长字符串
读写块,占用多余空间 读写慢,不占用多余空间

ps:

CHAR(5):表示固定占用5个字符,如果插入小于5个字符则其余空间用空格代替,如果插入大于5个字符,显示超出范围

VARCHAR(5):表示固定占用5个字符,如果插入小于5个字符则按实际字符存储,如果插入大于5个字符,显示超出范围

文本类型
TINYTEXT TEXT MEDIUMTEXT LONGTEXT
用于存储大量文本

使用建议:

1.经常变化的字段使用VARCHAR

2.知道固定长度的字段使用CHAR

3.超过255字符的只能用VARCHAR和TEXT

4.能用VARCHAR的地方不用TEXT

1.4枚举类型enum(固定多选一)

1.5日期类型

日期类型
YEAR DATE TIME DATETIME TIMESTAMP
日期 时间 日期时间 更详细的日期时间

2.表约束

2.1约束类型

约束类型
约束条件 说明
PRIMARY KEY 主键,唯一,不可为空
AUTO_INCREMENT 自动增长(整数类型,且为主键)
UNIQUE KEY 唯一,可以为空
NOT NULL 不能为空
DEFAULT 默认值
FOREIGN KEY 外键,实现表与表关联

2.2主键约束&自增约束PRIMARY KEY&AUTO_INCREMENT(必须与主键组合使用)

特点:唯一,非空

添加主键:

语法:ALTER 表名 ADD PRIMARY KEY(字段名);        -表存在添加

           CREATE TABLE 表名(字段名 类型, PRIMARY KEY(字段名));        -建表时添加

ALTER user2 ADD PRIMARY KEY(id);    -给user2的id字段添加主键

CREATE TABLE user3(id int,name varchar(20),sex enum('男','女'), PRIMARY KEY(id));
为id字段添加主键
删除主键:

语法:ALTER TABLE 表名 DROP PRIMARY KEY;

ALTER TABLE user5 DROP PRIMARY KEY;    -删除user5表的主键
删除自动增长

语法:ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型 约束条件;
           ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 约束条件;

ALTER TABLE user1 MODIFY COLUMN id int not NULL;    -修改id字段为int类型非空

ALTER TABLE user1 CHANGE id ids int NOT NULL;    -修改id字段为ids,int类型,非空
单列主键:

单列主键字段值唯一且非空

复合主键:(多个主键)

复合主键字段值当所有主键值都与以前数据完全相同时才不唯一,显示报错且非空

自增约束(必须与主键组合使用)

起始值为1,每次增量为1

2.3唯一约束UNIQUE KEY(字段值不能重复)

添加单列唯一约束

语法:ALTER TABLE 表名 ADD UNIQUE (列名);

ALTER TABLE user1 ADD UNIQUE id;    -为id字段添加唯一约束
删除单列唯一约束

语法:ALTER TABLE 表名 DROP INDEX 字段名;

ALTER TABLE user1 DROP INDEX id;    -删除id字段唯一约束

2.4NULL&NOT NULL(是否允许为空)

1. 是否允许为空,默认NULL; 可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,MySQL默认的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值

设置&修改NULL&NOT NULL约束

语法:ALTER TABLE 表名 ALTER COLUMN 字段名 SET 约束;

           ALTER TABLE 表名 MODIFT 字段名 类型 约束;

ALTER TABLE users ALTER COLUMN name SET NOT NULL;    -设置name字段非空

ALTER TABLE user8 MODIDY age INT NULL;    -设置age字段为int类型

2.5默认约束DEFAULT

设置&修改默认约束

语法:ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 新默认值;

ALTER TABLE user9 ALTER COLUMN sex SET DEFAULT '女';    -修改sex字段默认值为女
删除默认约束

语法;ALTER TABLE 表名 ALTER COLUMN 字段名 DROP DEFAULT;

ALTER TABLE user9 ALTER COLUMN sex DROP DEFAULT;    -删除sex字段默认值

2.6外键约束FOREIGN KEY(在从表使用)

  • 定义:外键是用于建立和强制两个表之间链接的约束,它指向另一个表的主键(或唯一键),用于保证数据的引用完整性
  • 作用
  • 防止出现无效的关联数据(比如在订单表中插入一个不存在的用户 ID);
  • 控制关联数据的删除 / 更新行为(比如删除用户时,是否级联删除其订单);
  • 核心术语
  • 主表(父表):被引用的表(比如用户表 users);
  • 从表(子表):引用主表的表(比如订单表 orders);
  • MySQL 注意事项:外键约束仅在 InnoDB 存储引擎下生效,MyISAM 不支持外键。
外键语句
操作 说明
ON DELETE CASCADE

主表删除记录,子表相关记录自动删除

ON DELETE NO ACTION

有子表记录时,禁止删除主表记录(默认)

ON UPDATE CASCADE

主表主键更新,子表外键同步更新

ON DELETE SET NULL

主表删除记录,子表外键设为NULL

例1:定义主表user10与从表user11

主表user10

从表user11

修改操作

想要修改外键先删除,再更新

1.删除外键
ALTER TABLE orders 
DROP FOREIGN KEY fk_orders_user_id;

2.跟新规则
ALTER TABLE orders 
ADD CONSTRAINT fk_orders_user_id --约束名 
FOREIGN KEY (user_id)  --本表外键
REFERENCES users(user_id) --关联表外键
ON DELETE CASCADE  -- 删除主表用户,从表关联订单也被删除
ON UPDATE CASCADE; -- 更新主表user_id时,从表关联数据同步更新

2.7CHECK约束

  • 定义:CHECK 约束用于限制列中值的范围,强制列的数据必须满足指定的条件。
  • 作用:保证列数据的域完整性(比如年龄必须是正数、性别只能是男 / 女)。
  • MySQL 注意事项
    • MySQL 8.0.16 之前的版本,CHECK 约束语法支持但不生效(仅做语法校验,实际不限制数据);
    • MySQL 8.0.16 及以后版本,CHECK 约束完全生效,替代了之前常用的 ENUM、触发器等方案。

添加/删除CHECK约束
1.添加CHECK服务
ALTER TABLE students 
ADD CONSTRAINT chk_stu_name_not_empty 
CHECK (stu_name <> '');

2.删除CHECK服务
ALTER TABLE students DROP CONSTRAINT chk_stu_name_not_empty;

2.6各种约束添加&删除语法总结

约束管理速查表
约束类型 添加语法 删除语法
主键约束 ALTER TABLE 表 ADD PRIMARY KEY(列) ALTER TABLE 表 DROP PRIMARY KEY
唯一约束 ALTER TABLE 表 ADD UNIQUE(列) ALTER TABLE 表 DROP INDEX 约束名
默认值 ALTER TABLE 表 ALTER COLUMN 列 SET DEFAULT 值 ALTER TABLE 表 ALTER COLUMN 列 DROP DEFAULT
NOT NULL ALTER TABLE 表 MODIFY COLUMN 列 类型 NOT NULL ALTER TABLE 表 MODIFY COLUMN 列 类型 NULL
自增

ALTER TABLE 表名
MODIFY COLUMN 列名 类型 AUTO_INCREMENT

ALTER TABLE 表名
MODIFY COLUMN 列名 类型;

检查约束 ALTER TABLE 表 ADD CONSTRAINT 约束名 CHECK(条件) ALTER TABLE 表 DROP CONSTRAINT 约束名
外键约束 ALTER TABLE 子表 ADD FOREIGN KEY(列) REFERENCES 父表(列) ALTER TABLE 表 DROP FOREIGN KEY 约束名

总结:

修改&添加字段/约束:ALTER TABEL 表名 MODIFY COLUMN 字段名 类型 约束;

添加&删除主键、唯一等约束:ALTER TABEL 表名 ADD 约束 (字段名);

                                                 ALTER TABEL 表名 DROP 约束 (字段名);

3.表基本操作

3.1添加字段

语法:ALTER TABLE 表名 ADD 字段名 类型 约束;

ALTER TABLE user1 ADD math INT;    -添加math字段

ALTER TABLE user1 ADD (math INT,english CHAR);    -添加math与english字段

ALTER TABLE user1 ADD id INT AFTER home;    -添加字段id到home字段后

ALTER TABLE user1 ADD uid CHAR(8) FIRST;    -添加字段uid到第一个字段

3.2修改字段和类型

语法:ALTER TABLE 表名 MODIFY 字段名 类型 约束;

           ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 约束;

           ALTER TABLE 表名 DROP 字段名

ALTER TABLE user1 MODIFY name VARCHAR(20) NOT NULL;    -修改name类型与约束

ALTER TABLE user1 MODIFY num INT AFTER hostname;    -修改num类型为INT,在HOSTNAME字段后

ALTER TABLE user1 CHANGE name name1 CHAR(8) UNIQUE KEY;    -修改name为name1设置类型CHAR(8),唯一

ALTER TABEL user1 DROP name;    -删除name字段

3.3表复制

语法:CREATE TABLE 表名 LIKE 源表名;        -只复制表结构

           CREATE TABLE 表名 SELECT * FROM 源表名;         -复制表结构与数据

           CREATE TABLE 表名 SELECT 源表字段 FROM 源表;        -复制指定字段

ALTER TABLE user2 LIKE user1;    -复制user1的表结构

ALTER TABLE user2 SELECT * FROM user1;    -复制user1表的结构与数据

ALTER TABLE user2 SELECT id,name FROM user1;    -复制user1表的指定字段

3.4删除表

语法:DROP TABLE 表名;

DROP TABLE user1;    -删除user1表

4.数据操作

4.1增删改

语法:INSERT INTO 表名(字段1,字段2..)VALUES (字段1值,字段2值),(字段1值,字段2值)

          UPADTE 表名 SET 修改的字段 WHERE 给谁修改

          DELETE FROM 表名 WHERE 删除哪个

INSERT INTO user1 VALUES (1,'jack');    -插入一条记录

INSERT INTO user1(id,name) VALUES (1,'jack');    -指定字段插入一条记录

INSERT INTO user1(id,name) VALUES (1,'jack'),(2,'tom');    -指定字段插入多条记录

UPDATE user1 SET name=tony WHERE id=2;    -更新user1表中字段id=2的name字段叫tony

UPDATE user1 SET name=tony;    -更新user1表中所有name字段叫tony

DROP FROM user1 WHERE id=1;    -删除user1表中id=1的数据

DROP FROM user1;    -删除整个user1表的数据

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐