多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 建库、建表 **1、建库:** (1)、create database 或者 create schema 两种语法使用方法一致。 当创建的数据库本身存在没有写if not exists子句,则会创建失败报错。 ~~~ mysql> create database test; Query OK, 1 row affected (0.00 sec) mysql> create database test; ERROR 1007 (HY000): Can't create database 'test'; database exists mysql> create database if not exists test; Query OK, 1 row affected, 1 warning (0.00 sec) ~~~ (2)、create_specification子句表名创建数据库的属性,并存储在db.opt文件中。 character_set 默认的字符集 collate 默认的排序规则 也可以在数据目录下创建mkdir一个目录,mysql会识别为一个数据库。 (3)、切换数据库,use命令可以切换数据库 ~~~ mysql> use test1; Database changed ~~~ (4)、查看当前的数据库 第一种: ~~~ mysql> select database(); +------------+ | database() | +------------+ | test1 | +------------+ 1 row in set (0.00 sec) ~~~ 第二种:`mysql> status;` **2、建表** (1)、create table语句,默认是在本数据库下创建,也可以指定数据库。 ~~~ create table tbl_name(name varchar(10),age int); create table test.tbl_name(name varchar(10),age int); create table if not exists tbl_name(name varchar(10),age int); ~~~ if not exists 表示相同名字时,不创建该表也不报错。 (2)、temporary 创建临时表,仅对本链接可见,另外的数据库连接不可见,当本链接断开时,临时表也自动被drop掉。 ~~~ create temporary table test2(sid int,name varcahr(10)); insert into test2 values(1,'a'); select * from test2; ~~~ (3)、like关键词表示基于另一个表的定义复制一个新的空表,空表上的字段属性和原表相同。只复制结构不会复制内容。 `create table students_copy like students;` (4)、create table ......as select 语句表示创建表的同时将select查询结果插入到新表中,但是索引和主外键不会同步过来。 `create table students_copy2 as select * from students;` **ignore和replace表示在插入数据的过程中如果新表中碰到违反唯一约束的情况下,ignore会不插入,replace会替换原有数据。 默认情况下两个关键词都不写碰到违反的情况会报错。** `INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test9@163.com', '99999', '9999');` (5)、字段说明 data_type 表示定义的字段类型 not null 表示该字段需要明确值或者要有默认值,否则报错 null 表示允许字段为空 ~~~ mysql> create table students(sid int not null,sname varchar(10) null); Query OK, 0 rows affected (0.01 sec) mysql> insert into students values(1,'a'); Query OK, 1 row affected (0.00 sec) mysql> insert into students values(1); ERROR 1136 (21S01): Column count doesn't match value count at row 1 mysql> insert into students (sid)values(1); Query OK, 1 row affected (0.01 sec) mysql> select * from students; +-----+-------+ | sid | sname | +-----+-------+ | 1 | a | | 1 | NULL | +-----+-------+ 2 rows in set (0.00 sec) ~~~ default 表示设置字段的默认值 ~~~ mysql> create table students3(sid int,sname varchar(10),gender int default 2); mysql> insert into students3 values(1,'a',default); mysql> insert into students3(sid,sname)values(1,'abv'); mysql> select * from students3; +------+-------+--------+ | sid | sname | gender | +------+-------+--------+ | 1 | a | 2 | | 1 | abv | 2 | +------+-------+--------+ 2 rows in set (0.00 sec) ~~~ auto_increment 表示字段为整数或者浮点数类型value+1递增,value为当前表中该字段最大的值,默认为1开始递增。一个表中只能有一个自增字段,且该字段必须有key属性,不能含有default属性,且插入负值会被当成是很大的正数。 ~~~ mysql> create table students4(sid int primary key auto_increment,sname varchar(10)); mysql> insert into students4(sname)values('dadf'); mysql> insert into students4 values(3,'eee'); mysql> insert into students4 (sname) values('ert'); mysql> select * from students4; +-----+-------+ | sid | sname | +-----+-------+ | 1 | dadf | | 3 | eee | | 4 | ert | +-----+-------+ 3 rows in set (0.00 sec) ~~~ 报错信息: ~~~ mysql> create table students5(sid int auto_increment,sname varchar(10)); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key ~~~ constraint 表示为主键、唯一键、外键等约束条件命名,如果没有命名则mysql会默认给一个。 **primary key 表示该字段为主键,主键字段必须是唯一的,必须非空。一个表中只能有一个主键,主键可以包含一个或多个字段。同时也在此key上建立了一个主键索引; unique表示唯一属性字段,且允许包含多个null值,同时也在这个key上建立了一个唯一索引;。 (每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束) foreign key 表示该字段为外键字段。同时也在这个key上建立了一个index;** **key/index 表示索引字段 index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等; key 是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。 因此,索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)** ~~~ mysql> create table students6( -> sid int not null primary key auto_increment, -> sname varchar(10) unique,gener int, -> constraint for_1 foreign key(gener) references gener(gener_id)); Query OK, 0 rows affected (0.04 sec) ~~~