mysql server
mysql -h localhost -u root -p //连接数据库 
enterpasswd:  //键入密码

>show databases; //输出数据库名表

>create database test_db; //创建一个名字是test_db的数据库

>use test_db; //进入test_db数据库

>create table tb_emp1
>(
>id int(11),
>name varchar(25),
>deptid int (11),
>salary float
>);
//创建一个数据库表,标明为tb_emp1,表中有4个字段,字段名id表示名单标号,字段名name表示员工名称,字段名deptid表示所在部门编号,字段名salary表示员工薪水

>show tables; //输出数据库中的表

>desc tb_emp1; //输出数据表中的字段名称

//定义主键的方法
//1.定义列的同时指定主键
>create table tb_emp2
>(
>id int(11) primary key,
>name varchar(25),
>deptid int(11),
>salary float
>);
//创建一个数据库,标明为tb_emp2,表中有4个字段,字段名id表示名单编号且定义为主键
//主键能够唯一表示表中的一条记录,可以结合外键来定义不同的数据表之间的关系,并且可以加快数据库的查询速度

>desc tb_emp2; //使用desc显示数据表中列的名称,id字段定义为PRI

//2.定义完所有列后定义主键
>create table tb_emp3
>(
>id int(11),
>name varchar(25),
>deptid int(11),
>salary float,
>primary key(id)
>);
//效果同上

//设置多字段联合主键  一个确定不了唯一,需要多个组合来确定唯一。
>create table tb_emp4
>(
>id int(11),
>name varchar(25),
>deptid int(11),
>salary float,
>primary key(id,deptid)
>);

>desc tb_emp4; //查看发现id和deptid字段都被标记为主键 称为表tb_emp4的联合主键


//外键是用来在两个表之间建立连接,可以是一个或者多个,一个表的外键可以是空值,若不是空值,则必须与另外一个表的主键键值

//外键是表的一个字段,可以不是本表的一个主键,但必须对应于另外一个表的主键
//定义外键后,不允许删除在另一个表中具有关联关系的行,外键的作用是保持数据的一致完整性。部门表tb_dept的主键是id,在员工表tb_emp5中有一个键deptid与这个id关联

>create table tb_dept
>(
>id int(11) primary key,
>name varchar(22) not null, //使用了非空约束字段标志not null
>location varchar(50)
>);
//新建一个部门表,id表示部门号,name表示部门名称,location表示部门位置

>create table tb_emp5
>(
>id int(11) primary key,
>name varchar(25),
>deptid int(11),
>salary float,
>constraint fk_emp_dept1 foreign key(deptid) references tb_dept(id)
>);
//新建一个员工信息表tb_emp5,在该表中添加名称为fk_emp_dept1的外键约束,外检名称为deptid,其依赖于表tb_dept1的主键id
//模板 constraint 外键名 foreign key(字段名1) references 主表名(主键1)

//字表与父表
//相关表之间的联系,子表(从表)的外键必须关联父表(主表)的主键,且关联字段的数据类型必须匹配

>create table tb_emp6
>(
>id int(11) primary key,
>name varchar(25) not null 
>deptid int(11),
>salary float,
>constraint fk_emp_dept2 foreign key(deptid) references tb_emp6(id)
>);
//定义非空字段name插入值不能为空

//唯一性约束(unique)要求该列唯一,允许为空,但只能出现一个空值
//字段唯一性约束定义方法1
>create table tb_dept2
>(
>id int(11) primary key,
>name varchar(22) unique,
>location varchar(50)
>);

>desc tb_dept2  //显示字段键值为UNI

//字段唯一性约束定义方法2
>create table tb_dept3
>(
>in int(11) primary key,
>name varchar(22),
>location varchar(50),
>constraint sth unique(name)
>);

>desc tb_dept3

show create table 表名 //查看表中外键约束名称

//默认约束用来指定列默认的值。如果插入一条新的记录是没有为这个字段复制,那么系统会自动为这个字段赋默认值。
//字段名 数据类型 default 默认值
>create table tb_emp7
>(
>id int(11) primary key,
>name varchar(25) not null,
>deptid int(11) default 11111,  //设置员工所在的部门编号默认11111
>salary float,
>constraint fk_emp7_dept foreign key(deptid) references tb_dept(id)
>);

>desc tb_emp7 //发现tb_emp7表中deptid列的default键值为11111

//在主键中添加AUTO_INCREMENT关键字可以使系统自动生成主键值,且每增加一条记录,主键值加1 该关键字可以应用于任何整数类型

>create table tb_emp8
>(
>id int(11) primary key auto_increment,
>name varchar(25) not null,
>deptid int(11) default 11111,
>salary float,
>constraint fk_emp8_dept foreign key(deptid) references tb_dept(id)
>);

>desc tb_emp8 //tb_emp8表中的deptid列default键值为11111,id列Extra键值为auto_increment

//下面我们来测试一下
//首先我们现在tb_dept表中添加一个部门id为11111的记录,否则在tb_emp8中插入记录时会因为缺少默认11111的部门id的外键值而连接出错

>insert into tb_dept(id,name,location)
>values(11111,'server','shaanxi,china');

>insert into tb_emp8(name,salary)
>values('frank',6000),('tom',5600),('grace',5900);

//下面我们用select显示表中所有记录 结果可以看到id值自动增加
>select * from tb_emp8 

//我们可以查看mysql中变量的值
>show variables like '%xxx%'; //查看session会话变量的值 可以查看auto_increment变量值
>show global variables like '%xxx%'; //查看全局变量的值

//查看表基本结构语句
>describe tb_emp8;
>desc tb_emp8;
//表基本结构极端解释
//NULL :该列是否可以存储NULL值,可以为YES,不也以为NO
//Key:表示该列是否可以存储NULL值,PRi表示该列是表主键的一部分,UNI表示该类是UNIQUE索引的一部分,MUL表示在列中某个给定值允许出现多次
//Default:表搜狐死该列是否有默认值,如果有的话是多少
//Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等

//查看表详细结构语句
>show create table tb_emp8\G;
//增加\G参数是显示效果整齐

//区别 desc语句使用表格的形式显示出表的基本结构 show create table语句使用语句的形式显示出标的详细结构