MySQL主键(Primary Key)是唯一标识表中每行的列或一组列。当定义表的主键时,必须遵循以下规则:
主键必须包含唯一值。如果主键由多个列组成,则这些列中的值的组合必须是唯一的。
主键列不能包含NULL值。 这意味着必须使用NOT NULL属性声明主键列。如果没有指定NOT NULL,MySQL将强制为主键列为NOT NULL。
一张表只有一个主键。
auto_increment字段约束
自动增长
只能修饰 int字段。 表明mysql应该自动为该字段生成一个唯一没有用过的数(每次在最大ID值的基础上加1。特例:如果目前最大ID是34,然后删除34,新添加的会是35.)。对于主键,这是非常 有用的。 可以为每条记录创建一个惟一的标识符
清空表中所有记录:
delete 不加where条件,清空所有表记录。但是delete不会清零auto_increment 值
清auto_increment 值: truncate table xxxx;
索引:
创建普通索引:
方法一:创建表时添加索引 方法二 alter table 表名 add index 索引名称 (字段1,字段2…);
create table 表名(
列定义
key 索引名称 (字段)
key 索引名称 (字段)
)
唯一索引:
创建表时加唯一索引
create table 表名(
列定义:
unique key 索引名 (字段);
)
修改表时加唯一索引
alter table 表名 add unique 索引名 (字段);
mysql> alter table demo3 drop key uName;
mysql> alter table demo3 add unique(uName);
主键索引:
创建表创建主键索引
mysql> create table demo5( id int(4) not null auto_increment, name varchar(20) default null,primary key(id));
全文索引 (FULLTEXT INDEX)
select 语句 where bName like ‘%网%’ 用% _ 通配符,不通过索引,直接全表扫描。
创建表时创建
create table 表名(
列定义,
fulltext key 索引名 (字段);
)
改表时添加
alter table 表名 add fulltext 索引名 (字段);
ALTER TABLE books
ADD FULLTEXT [索引名] (author
)
索引设计原则:
1、索引并非越多越好
2、数据量不大不需要建立索引
3、列中的值变化不多不需要建立索引 row id
4、经常排序(order by 字段)和分组(group by 字段)的列需要建立索引
select a.bTypeId,(select b.bTypeName from category b where a.bTypeId = b.bTypeId) bn,count(*) from books a group by bTypeId;
5、唯一性约束对应使用唯一性索引
Table (id pri,use,name index,pass)
外键约束:每次插入或更新时,都会检查数据的完整性。
通过create table创建外键
语法:
create table 数据表名称(
…,
[CONSTRAINT [约束名称]] FOREIGN KEY [外键字段]
REFERENCES 外键表名
[ON DELETE CASCADE ]
[ON UPDATE CASCADE ]
)
RESTRICT: 拒绝对父表的删除或更新操作。
CASCADE: 从父表删除或更新且自动删除或更新子表中匹配的行。ON DELETE CASCADE和ON UPDATE CASCADE都可用
语法:foreign key 当前表的字段 references 外部表名 (关联的字段) ENGINE =innodb
1、确保参照的表和字段存在。
2、组成外键的字段被索引。
3、必须使用ENGINE指定存储引擎为:innodb.
4、外键字段和关联字段,数据类型必须一致。
通过alter table 创建外键和级联更新,级联删除
alter table 数据表名称 add
[constraint [约束名称] ] foreign key (外键字段,…) references 数据表(参照字段,…)
[on update cascade|set null|no action]
[on delete cascade|set null|no action]
)
删除外键:
alter table 数据表名称 drop foreign key 约束(外键)名称
视图:create view视图名称(即虚拟的表名) as select 语句。
更新或修改视图
alter view视图名称(即虚拟的表名) as select 语句。
update view视图名称(即虚拟的表名)set
删除视图:drop view bc;