mysql数据库入门2

mysql数据库入门2

查看约束条件
desc 库名.表名; //查看表的表头信息

设置约束条件
null 允许为空(默认设置)
not null 不允许为\null(空)
key 键值类型
default 设置默认值,缺省为null
extra 额外设置

create table db1.t7(
name char(10) not null,
age tinyint unsigned default 19
class char(7) not null default “nsd1902”
pay flaot(7,2) default 28000
);

语法结构

alter table 库名.表名 执行动作
add 添加字段
modify 修改字段类型
change 修改字段名
drop 删除字段
rename 修改表名

添加新字段
alter table 库名.表名
add 字段名 类型(宽度) 约束条件
[after 字段名| first];

例子
alter table db1.t2
add
name char(15) first;

修改字段类型
alter table 库名.表名
modify 字段名 类型(宽度) 约束条件
[after 字段名 | first];

例子:
alter table db1.t2
modify
id int;

修改字段名
alter table 库名.表名
change 源字段名 新字段名 类型(宽度)
约束条件;

例子
alter table db1.t2 change id user_num int;

删除字段
基本用法:
表中有多条记录时,所有列的字段的值都会被删除
alter table 库名.表名 drop 字段名;

例子
alter table db1.t2 drop user_num,drop pay;

修改表名
基本用法
表对应的文件名,也被改变
表记录不受影响

alter table 表名 rename 新表名

alter table t2 rename school;

已有表里创建索引字段key_name
create index

index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值
index普通索引的字段的值允许重复,且可以赋null值

对表中的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据库的维护效率
对表中的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据库的维护效率
对表中的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据库的维护效率
对表中的数据进行增加、删除、修改的时候,索引也需要动态维护,降低了数据库的维护效率

primary key主键
主键的对应字段不允许有重复,且不允许赋null值

作用:限制字段赋值
使用规则
使用主键:
1.字段值不允许重复,且不允许赋null值
2.一个表中只能有一个primary key 主键字段
3.多个字段都左前卫主键,成为复合主键,必须一起创建.
4.主字段的标志是PRI
5.主键通常与auto_increment连用
6.通常把表中唯一标识记录的字段作为主键;

primary key 主键的对应字段不允许有重复,且不允许赋null值

复合主键
约束方式:主键字段的值不可以同时重复

primary key 与 auto_increment 连用
自增长
赋值时 字段的值字段加1

foreign key 外键
使用foreign key的时候表的存储引擎必须是innodb,不能是其他

作用:限制给字段赋值,插入记录时,字段值在另一个表字段值范围内选择.

使用foreign key的时候表的存储引擎必须是innodb

使用规则:
1.表存储引擎必须是innodb (innodb存储引擎是共享表空间的,共享!!!共享!!!)
2.字段类型要一致
3.被参照字段必须是索引类型的一种,通常是primary key主键

innodb存储引擎
innodb存储引擎是共享表空间的

mysiam引擎
myisam引擎支持表级锁,不支持行级锁,不支持事务

mysql锁的类型有那几种
读锁 (共享读)
写锁 (并发读) 写锁是独占锁,上锁期间其他线程不能读表或者写表

创建外键
create table 库.表 (
字段名列表,
foreign key(字段名) reference 表名(字段名)
on update casecade 同步更新,随被引用的表值变化二变化
on delete casecade 同步删除
)engine=innodb;

建立员工表
mysql> create table db1.staff(
-> staff_id int primary key auto_increment,
-> name char(20)
-> )engine=innodb;
Query OK, 0 rows affected (0.20 sec)

salary 工资表

mysql> create table db1.salary( salary_id int, salary float(7,2), foreign key(salary_id) references staff(staff_id) on update cascade on delete cascade )engine=innodb;
Query OK, 0 rows affected (0.25 sec)

mysql> show create table db1.staff\G //竖着查看工资表
*************************** 1. row ***************************
Table: staff
Create Table: CREATE TABLE staff (
staff_id int(11) NOT NULL AUTO_INCREMENT,
name char(20) DEFAULT NULL,
PRIMARY KEY (staff_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql> show create table db1.salary\G //竖着查看工资表
*************************** 1. row ***************************
Table: salary
Create Table: CREATE TABLE salary (
salary_id int(11) DEFAULT NULL,
salary float(7,2) DEFAULT NULL,
KEY salary_id (salary_id),
CONSTRAINT salary_ibfk_1 FOREIGN KEY (salary_id) REFERENCES staff (staff_id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

同步更新
update db1.staff set staff_id=4 where staff_id=3

控制发工资的员工的编号只能是员工表的员工编号 外键
控制发工资的员工编号不能为空 主键

练习题
50 51 52 53
数据库密码

前任信息表
婚宴邀请表

create tables pre.wedlist( foreign key(name) references former(name) on update cascade on delete cascade,way enum(car,bus),come enum(“yes”,“no”),primary key(name) )engine=innodb;

上一篇:MySQL---表操作


下一篇:多态和向上向下转型