注意点:
1、数据库的语句不区分大小写,
2、不能重复创建数据库,否则会报数据库已经存在,可以通过使用其他的语句提高容错
数据完整性:类型 约束
使用数据的类型原则:够用就行,尽量的选择取值范围小,不用太大的,节省存储空间
varchar 表示的是可变长度的字符串 varchar(3) 'asd' 'as' 'as' 在定义的过程中,必须指定长度 char 表示的是固定长度的字符串 char(3),'as' ' as',无所谓,可以不指定,默认一个字符,最大255 decimal(m,n) m代表的是一共有M位,但是n表示的是小数占多少位 int 使用4个字节保存整数数据5.1.1 整数类型
1、如果没有设置,默认是有符号数,如果需要设置无符号数,用UNSIGNED来进行设置 2、当前数据库版本中,如果插入的数据越过范围,默认用边界值进行替换 3、如果使用ZEROFILL,会使用0来进行填充,将数据类型直接从有符号数,变为无符号数 4、如果出现的是int(num),这里的num不是规定了存储的长度,规定的是显示的宽度,一般配合的是zerofill使用5.1.2 小数类型
1、float类型在存储的时候,存储的是二进制中最接近小数的那个值 2、float因为上述的特性,会造成误差的存在,使用精度不是特别高的情况下,数据的存储 3、decimal存储的过程中,按照写入的数据进行存储,适用的场景为精度要求较高的,比如货币的运算5.1.3 字符型 常用的类型是:
char
varchar
text 大文本存储,当数据字符大于4000的时候,使用
特点空间n的省略问题char(n)固定长度的字符比较耗费可以省略,默认是1varchar(n)可变长度的字符节省不可以省略使用的过程中,按照你的产品规划写选择具体的类型
注意点: 1、timestamp这种格式的数据,存在默认值,不允许为空5.2.1 常见的约束类型
约束说明PRIMARY KEY主键,保证数据的唯一性,并且是非空,物理上存储的顺序default默认值,保证这个字段也有默认值的存在,当没有填写该字段的时候,使用的是默认值,如果填写数据以填写的数据为准not null非空约束,保证了当前的字段不允许存在空值unique唯一值约束,但是可以为空,确保该字段不允许有重复check检查,但是不支持FOREIGN KEY外键,限制两个表的关系,约束该字段的值必须来自与之关联的主表的值,对关系字段进行约束,当关系字段填写数据的时候,会在关联的数据表中查询该值是否存在,如果存在则填写成功,如果不存在填写失败抛出异常5.2.2 创建约束的时间
1、创建表的时候
2、修改表的时候
3、必须在插入数据之前
5.2.3 约束的分类
分类说明字段约束语法上都支持,但是外键约束是没有效果的表级约束除了非空、默认,其他都支持5.2.4 字段约束的实例
CREATE TABLE users( id INT PRIMARY KEY AUTO_INCREMENT, #主键 username VARCHAR(20) NOT NULL, #非空 gender CHAR CHECK(gender='男' OR gender='女'),#检查 phone VARCHAR(11) UNIQUE, #唯一值 age INT DEFAULT 18, #默认值 address INT REFERENCES address(id) #外键 ) CREATE TABLE address( id INT PRIMARY KEY AUTO_INCREMENT, city VARCHAR(50) ) SHOW TABLES; 注意点: 1、check这个约束正常写,不报错,但是mysql是不支持的 2、外键写在字段约束中,不生效5.2.5 表级约束
表级约束 CREATE TABLE userss( id INT , #主键 username VARCHAR(20) , #非空 gender CHAR ,#检查 phone VARCHAR(11), #唯一值 age INT , #默认值 addressid INT, CONSTRAINT uid PRIMARY KEY(id),#约束的是主键 CONSTRAINT uqkey UNIQUE(phone),#约束的是唯一值 CONSTRAINT ck CHECK(gender='男' OR gender='女'),#约束的是检查 CONSTRAINT fkk FOREIGN KEY(addressid) REFERENCES address(id) #约束的是外键 ) SELECT * FROM userss; CREATE TABLE usersss( id INT , #主键 username VARCHAR(20) , #非空 gender CHAR ,#检查 phone VARCHAR(11), #唯一值 age INT , #默认值 addressid INT, PRIMARY KEY(id),#约束的是主键 UNIQUE(phone),#约束的是唯一值 CHECK(gender='男' OR gender='女'),#约束的是检查 FOREIGN KEY(addressid) REFERENCES address(id) #约束的是外键 )5.2.6 通用格式
# 通用格式 CREATE TABLE userssss( id INT PRIMARY KEY AUTO_INCREMENT, #主键 username VARCHAR(20) NOT NULL, #非空 gender CHAR CHECK(gender='男' OR gender='女'),#检查 phone VARCHAR(11) UNIQUE, #唯一值 age INT DEFAULT 18, #默认值 addressid INT, #外键 FOREIGN KEY(addressid) REFERENCES address(id) ) 保证唯一性是否为空一张表中可以存在多个唯一值约束可以可以可以存在多个主键约束可以不可以有一个5.2.7 修改约束
约束类型语法字段约束alter table 表名 modify 字段名 字段类型 新约束表级约束ALTER TABLE 表名 ADD CONSTRAINT 新约束名 约束类型注意点(外键的添加)ALTER TABLE 表名 ADD CONSTRAINT FOREIGN KEY(需要添加外键的字段名) REFERENCES 产生关联的表(字段);5.2.8 外键的重要事项 1、添加外键的时候,使用的是表级约束,字段约束可以写,但是不生效
2、如果字段额外增加外键的时候,ALTER TABLE 表名 ADD CONSTRAINT FOREIGN KEY(需要添加外键的字段名) REFERENCES 产生关联的表(字段);
5.2.9 删除约束
# 删除约束 删除主键 ALTER TABLE userss DROP PRIMARY KEY; 删除唯一值 ALTER TABLE userss DROP INDEX uqkey 删除外键 ALTER TABLE userss DROP FOREIGN KEY fkk 注意点: 1、在删除约束之前,必须查看一下约束名 SHOW INDEX FROM userssss; 2、在1的基础上删除