前言:昨天跟大家分享了MySQL的账号管理、建库及四大引擎,今天与大家分享的知识是MySQL之数据类型、建表和六大约束。
一、数据类型介绍
1、作用:MySQL中定义数据字段的类型对你数据库的优化是非常重要的。。
2、MySQL的数据类型与之前我们学习的sqlserver和oracle大同小异,MySQL支持三种类型:数值、日期/时间和字符串(字符)类型。
char、varchar、text、blob
date、time、datetime、timestamp(date指年月日时分秒,time指时分秒,datetime指年月日,timestamp指时间戳(长整数))
int、bigint、float、decimal(bigint就当于java中的long类型)
二、建表:
1.1、建表和之前的sqlserver以及oracle是一样的,其语法如下:
语法: create table 表名( 列名 列的类型【(长度) 约束】, 列名 列的类型【(长度) 约束】, 列名 列的类型【(长度) 约束】, 列名 列的类型【(长度) 约束】 )
案列:
create table t_mysql_user(
id int ,
uname VARCHAR(20),
usex varchar(30)
)
1.2、搜索表结构:
desc t_mysql_users
2.表的修改:
ALTER TABLE 表名 ADD|DROP|MODIFY|CHANGE COLUMN 列名 【列类型 约束】;(注意大小写)
2.1:修改列名:
ALTER TABLE book CHANGE COLUMN publishdate(原列名) pubDate(现列名) DATETIME(数据类型);
代码:
--新建表
create table t_mysql_user(
id int ,
uname VARCHAR(20),
usex varchar(30)
)
--1、修改列名(将uname改成unames)
ALTER TABLE t_mysql_user CHANGE COLUMN uname unames varchar(30);
运行结果:
2.2添加新列:
ALTER TABLE author ADD COLUMN annual DOUBLE;
代码:
--3、增加列名
ALTER TABLE t_mysql_user ADD COLUMN uprice BIGINT
运行结果:
2.3删除列:
ALTER TABLE book_author DROP COLUMN annual;
代码:
--4、删除列名
ALTER TABLE t_mysql_user DROP COLUMN uprice
运行结果:
2.4修改表名:
ALTER TABLE author RENAME TO book_author;
代码:
ALTER TABLE t_mysql_user RENAME TO t_mysql_userss
运行结果:
3、表的删除:
DROP TABLE IF EXISTS book_author;
代码:
DROP TABLE IF EXISTS t_mysql_usersss
运行结果:
4、表的复制:
4.1、复制表的结构:
代码:
CREATE TABLE t_authors as select * from author where 1=0
运行结果:
author表:
4.2.复制表的结构+数据:
代码:
CREATE TABLE t_author as select * from author
运行结果:
4.3.只复制部分数据:
代码:
CREATE TABLE t_authorss as select aid,aname from author
运行结果:
4.4. 仅仅复制某些字段:
代码:
CREATE TABLE t_authorsss as select aid,address from author where 1=0
运行结果:
三、六大约束:
一、 1、定义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
2、分类:
2.1: NOT NULL:非空,用于保证该字段的值不能为空 比如姓名、学号等 2.2: DEFAULT:默认,用于保证该字段有默认值 比如性别 2.3: PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空 比如学号、员工编号等 2.4: UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空 比如座位号 2.5: CHECK:检查约束【mysql中不支持】 比如年龄、性别 2.6: FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
3、添加约束的时机:1.创建表时 2.修改表时
4、约束的添加分类: 列级约束:六大约束语法上都支持,但外键约束没有效果
表级约束:除了非空、默认,其他的都支持
5、主键和唯一的大对比: 保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合 主键: √ × 至多有1个 √,但不推荐 唯一”: √ √ 可以有多个 √,但不推荐
6、添加约束: 6.1添加列级约束:
语法:直接在字段名和类型后面追加 约束类型即可。
只支持:默认、非空、主键、唯一
6.2添加表级约束:
语法:在各个字段的最下面
【constraint 约束名】约束类型(字段名)
二、修改表时添加约束:
1、添加列级约束:
alter table 表名 modify column 字段名 字段类型 新约束;
2、添加表级约束:
alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】;
3、添加非空约束:
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
代码:
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) null
运行效果:
4、添加默认约束:
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
代码:
ALTER TABLE stuinfo MODIFY COLUMN age int
运行效果:
5、添加主键:
5.1列级约束:
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
代码:
ALTER TABLE stuinfo MODIFY COLUMN id int PRIMARY KEY
运行效果:
5.2表级约束:
ALTER TABLE stuinfo ADD PRIMARY KEY(id);
代码:
ALTER TABLE stuinfo ADD UNIQUE(seat)
运行效果:
6、添加唯一:
6.1列级约束:
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
6.2:表级约束:
ALTER TABLE stuinfo ADD UNIQUE(seat);
7、添加外键:
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
三:修改表时删除约束:
1、删除非空约束:
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
代码:
--删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) null
运行效果:
2、删除默认约束 :
ALTER TABLE stuinfo MODIFY COLUMN age INT ;
代码:
--删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age int
运行效果:
3、删除主键 :
ALTER TABLE stuinfo DROP PRIMARY KEY;
代码:
ALTER TABLE stuinfo DROP PRIMARY KEY
运行效果:
4、删除唯一 :
ALTER TABLE stuinfo DROP INDEX seat
代码:
ALTER TABLE stuinfo DROP INDEX seat
运行效果:
5、删除外键:
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
代码:
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major
运行效果: