表介绍
表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段
id,name,qq,age称为字段,其余的,一行内容称为一条记录
内容:
1 创建表
2 查看表结构
3 数据类型
4 表完整性约束
5 修改表
6 复制表
7 删除表
总体基本操作
#1 操作文件夹(库)
增
create database db1 charset utf8;
查
show databases;
show create database db1;
改
alter database db1 charset gbk;
删
drop database db1;#2 操作文件(表)
切换到文件夹下:use db1
增
create table t1(id int,name char(10))engine=innodb;
create table t2(id int,name char(10))engine=innodb default charset utf8;
查
show tables;
show create table t1;
desc t1;#查看表结构
改
alter table t1 add age int;
alter table t1 modify name char(12);
删
drop table t1;#3 操作文件的一行行内容(记录)
增
insert into db1.t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
insert into db1.t1(name) values('egon1'),('egon2'),('egon3');
insert into db10.user(name) values('egon'),('alex');
查
select* fromt1;
select namefromt1;
select name,idfromt1;
改
update t1 set name='SB' where id=4;
update t1 set name='SB' where name='alex';
删
deletefrom t1 where id=4;#对于清空表记录有两种方式,但是推荐后者
delete fromt1;
truncate t1;#当数据量比较大的情况下,使用这种方式,删除速度快
truncate#自增id
create table t5(id int primary key auto_increment,name char(10));
create table t4(id intnot null unique,name char(10));
insert into t5(name) values
('egon5'),
('egon6'),
('egon7'),
('egon8'),
('egon9'),
('egon10'),
('egon11'),
('egon12'),
('egon13');#拷贝表结构
create table t7 select * from t5 where 1=2;
alter table t7 modify id int primary key auto_increment;
insert into t7(name) values
('egon1'),
('egon2'),
('egon3'),
('egon4'),
('egon5'),
('egon6'),
('egon7'),
('egon8'),
('egon9'),
('egon10'),
('egon11'),
('egon12'),
('egon13');
deletefrom t7 where id=1; #删记录
update t7 set name=''; #修改字段对应的值
一 创建表
语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
注意:1. 在同一张表中,字段名是不能相同2. 宽度和约束条件可选3. 字段名和类型是必须的
MariaDB [(none)]>create database db1 charset utf8;
MariaDB [(none)]>use db1;
MariaDB [db1]>create table t1(->id int,-> name varchar(50),-> sex enum('male','female'),-> age int(3)->);
MariaDB [db1]> show tables; #查看db1库下所有表名
MariaDB [db1]>desc t1;+-------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| sex | enum('male','female') | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-----------------------+------+-----+---------+-------+MariaDB [db1]> select id,name,sex,age fromt1;
Empty set (0.00sec)
MariaDB [db1]> select * fromt1;
Empty set (0.00sec)
MariaDB [db1]> select id,name fromt1;
Empty set (0.00 sec)
mysql>create database db1 charset latin1;
mysql>use db1;
mysql> create table t1(name varchar(20));
mysql> show create table t1; #查看表,发现表默认与数据db1的字符编码一致
mysql> insert into t1 values('林'); #插入中文出错,因为latin1不支持中文
ERROR 1366(HY000):
mysql>
#解决方法一:删除库db1,重建db1,字符编码指定为utf8
#解决方法二:修改
mysql> alter table t1 charset utf8; #修改表t1的编码
mysql> insert into t1 values('林'); #虽然t1的编码改了,但是t1的字段name仍然是按照latin1编码创建的
ERROR 1366(HY000):
mysql> alter table t1 modify name varchar(20); #需要重新定义下字段name
mysql> insert into t1 values('林');
mysql> select * fromt1;+------+
| name |
+------+
| 林 |
+------+ps:不要忘记将数据库编码也改成utf8,这样以后在该数据库下创建表时,都默认utf8编码了#配置文件:http://blog.csdn.net/yipiankongbai/article/details/16937815
乱码问题
#1. 修改配置文件
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8#mysql5.5以上:修改方式有所改动
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8#2. 重启服务#3. 查看修改结果:
\s
show variables like'%char%'
通过修改配置文件来解决乱码问题
二 查看表结构
MariaDB [db1]> describe t1; #查看表结构,可简写为desc 表名
+-------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| sex | enum('male','female') | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-----------------------+------+-----+---------+-------+
MariaDB [db1]> show create table t1\G; #查看表详细结构,可加\G
五 修改表ALTER TABLE
语法:1. 修改表名
ALTER TABLE 表名
RENAME 新表名;2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;3. 删除字段
ALTER TABLE 表名
DROP 字段名;4. 修改字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
示例:1. 修改存储引擎
mysql>alter table service-> engine=innodb;2. 添加字段
mysql>alter table student10-> add name varchar(20) notnull,-> add age int(3) not null default 22;
mysql>alter table student10-> add stu_num varchar(10) not null after name; //添加name字段之后
mysql>alter table student10-> add sex enum('male','female') default 'male' first; //添加到最前面3. 删除字段
mysql>alter table student10->drop sex;
mysql>alter table service->drop mac;4. 修改字段类型modify
mysql>alter table student10-> modify age int(3);
mysql>alter table student10-> modify id int(11) not null primary key auto_increment; //修改为主键5. 增加约束(针对已有的主键增加auto_increment)
mysql> alter table student10 modify id int(11) notnull primary key auto_increment;
ERROR1068 (42000): Multiple primary key defined
mysql> alter table student10 modify id int(11) notnull auto_increment;
Query OK, 0 rows affected (0.01sec)
Records: 0 Duplicates: 0 Warnings: 06. 对已经存在的表增加复合主键
mysql>alter table service2->add primary key(host_ip,port);7. 增加主键
mysql>alter table student1-> modify name varchar(10) notnull primary key;8. 增加主键和自动增长
mysql>alter table student1-> modify id int notnull primary key auto_increment;9. 删除主键
a. 删除自增约束
mysql> alter table student10 modify id int(11) notnull;
b. 删除主键
mysql>alter table student10-> drop primary key;
六 复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * fromservice;
只复制表结构
mysql> select * from service where 1=2; //条件为假,查不到任何记录
Empty set (0.00sec)
mysql> create table new1_service select * from service where 1=2;
Query OK, 0 rows affected (0.00sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> create table t4 like employees;
七 删除表
DROP TABLE 表名;