前言:昨天跟大家分享了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);

                                           运行结果: 

date建表 mysql mysql建表日期类型_数据库

                                    2.2添加新列:

ALTER TABLE author ADD COLUMN annual DOUBLE; 

                                                      代码:

--3、增加列名
ALTER  TABLE t_mysql_user ADD COLUMN uprice BIGINT

                                               运行结果: 

date建表 mysql mysql建表日期类型_字段_02

                                    2.3删除列:

ALTER TABLE book_author DROP COLUMN annual;

                                                  代码:

--4、删除列名
ALTER TABLE t_mysql_user DROP COLUMN uprice

                                           运行结果:

date建表 mysql mysql建表日期类型_MySQL_03

                                  2.4修改表名:

ALTER TABLE author RENAME TO book_author;

                                                    代码:

ALTER TABLE t_mysql_user RENAME TO t_mysql_userss

                                             运行结果:

date建表 mysql mysql建表日期类型_数据库_04

                  3、表的删除:

DROP TABLE IF EXISTS book_author;

                                    代码:

DROP TABLE IF EXISTS t_mysql_usersss

                              运行结果:

date建表 mysql mysql建表日期类型_mysql_05

                 4、表的复制:

                                   4.1、复制表的结构:

                                                                  代码:

CREATE TABLE t_authors as select * from author where 1=0

                                                           运行结果:

 author表: 

date建表 mysql mysql建表日期类型_字段_06

date建表 mysql mysql建表日期类型_字段_07

                                   4.2.复制表的结构+数据:

                                                                          代码:

CREATE TABLE t_author as select * from author

                                                                    运行结果:

date建表 mysql mysql建表日期类型_MySQL_08

                                    4.3.只复制部分数据:

                                                                    代码:

CREATE TABLE t_authorss as select aid,aname from author

                                                              运行结果:  

date建表 mysql mysql建表日期类型_MySQL_09

                                    4.4. 仅仅复制某些字段:                                

                                                                          代码:

CREATE TABLE t_authorsss as select aid,address from author where 1=0

                                                                    运行结果:

date建表 mysql mysql建表日期类型_MySQL_10

 三、六大约束:

       一、 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

                                运行效果:

date建表 mysql mysql建表日期类型_数据库_11

               4、添加默认约束:

ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

                                        代码:

ALTER TABLE stuinfo MODIFY COLUMN  age int

                                 运行效果:

date建表 mysql mysql建表日期类型_数据库_12

               5、添加主键:

                                   5.1列级约束:

ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

                                                      代码:

ALTER TABLE stuinfo MODIFY COLUMN  id int PRIMARY KEY

                                               运行效果:

date建表 mysql mysql建表日期类型_数据库_12

                                   5.2表级约束:

ALTER TABLE stuinfo ADD PRIMARY KEY(id);

                                                     代码: 

ALTER TABLE stuinfo ADD UNIQUE(seat)

                                               运行效果:

date建表 mysql mysql建表日期类型_数据库_12

                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

                                    运行效果:

date建表 mysql mysql建表日期类型_字段_15

                2、删除默认约束 :

ALTER TABLE stuinfo MODIFY COLUMN age INT ;

                                     代码:

--删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN  age int

                                      运行效果:

date建表 mysql mysql建表日期类型_date建表 mysql_16

               3、删除主键 :

ALTER TABLE stuinfo DROP PRIMARY KEY;

                            代码:

ALTER TABLE stuinfo DROP PRIMARY KEY

                            运行效果: 

date建表 mysql mysql建表日期类型_date建表 mysql_17

              4、删除唯一 :

ALTER TABLE stuinfo DROP INDEX  seat 

                            代码:

ALTER TABLE stuinfo DROP INDEX  seat

                            运行效果: 

date建表 mysql mysql建表日期类型_mysql_18

              5、删除外键:

ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

                              代码:

ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major

                              运行效果: 

date建表 mysql mysql建表日期类型_字段_19

 总结:今天的知识就分享到这里了,MySQL知识只要靠识记,并将学的知识反复练习就可以达到一个目标了,最后祝大家生活愉快!