mysql-数据表的操作
概述
数据表(或称表)时数据库最重要的组成部分之一,是其他对象的基础.
USE
- 打开数据库
- USE 数据库名称
2-6 创建数据表
(数据表创建的时候一定不能脱离实际的项目)
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
…
)
mysql> create table user(
-> username varchar(20),
-> age tinyint unsigned,
-> salary float(8,2) unsigned
-> );
Query OK, 0 rows affected (0.09 sec)
年龄和薪资 不可能为负值,所以设无符号值。
2-7 查看数据表
SHOW TABLES [FROM db_name]
[LIKE ‘pattern’ |WHERE expr]
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
1 row in set (0.00 sec)
2-8 查看数据表结构
SHOW COLUMNS FROM tbl_name
mysql> show columns from `user`;
+----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20) | YES | | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
| salary | float(8,2) unsigned | YES | | NULL | |
+----------+---------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
2-9 mysql添加和删除字段
mysql> alter table test add t_extract varchar(30);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test;
+-----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+----------------+
| t_id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| t_name | varchar(20) | YES | | NULL | |
| t_extract | varchar(30) | YES | | NULL | |
+-----------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> alter table test drop column t_extract;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc test;
+--------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+----------------+
| t_id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| t_name | varchar(20) | YES | | NULL | |
+--------+---------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
2-10 mysql记录的插入与查找
INSERT
插入记录
INSERT [INTO] tbl_name [(col_name,…)] VALUES(val,…)
省略了字段col_name,代表给所有的字段赋值
mysql> insert `user` values('xiaoming',25,8765.25);
Query OK, 1 row affected (0.01 sec)
也可以给指定字段赋值
mysql> insert `user`(username,age) values('xiaofang',22);
Query OK, 1 row affected (0.04 sec)
查看表的记录
SELECT expr,… FROM tbl_name
注意select * 这个星号其实是对字段的过滤并不是对记录的过滤
mysql> select * from `user`;
+----------+------+---------+
| username | age | salary |
+----------+------+---------+
| xiaoming | 25 | 8765.25 |
| xiaofang | 22 | NULL |
+----------+------+---------+
2 rows in set (0.00 sec)
2-11 MySQL空值与非空
空值与非空
- NULL , 字段值可以为空
- NOT NULL,字段值禁止为空
mysql> create table user2(
-> username varchar(20) not null,
-> age tinyint unsigned null
-> );
Query OK, 0 rows affected (0.09 sec)
mysql> show columns from user2;
+----------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| username | varchar(20) | NO | | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
+----------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
创建 一张表 user2 并设置字段 username 非空, age 可以为空
现在插入数据测试并查看结果
mysql> insert `user2` (username,age) values('宇智波佐助',null);
Query OK, 1 row affected (0.01 sec)
mysql> select * from `user2`;
+-----------------+------+
| username | age |
+-----------------+------+
| 宇智波佐助 | NULL |
+-----------------+------+
1 row in set (0.00 sec)
2-12 mysql 自动编号
AUTO_INCREMENT
- 自动编号,且必须与主键组合使用
- 默认情况下,起始值唯1,每次增加量为1
mysql> create table `user3`(
-> id smallint unsigned auto_increment,
-> username varchar(30) not null
-> );
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
必须与主键联合使用否则会报错
2-13 涉及主键约束
PRIMARY KEY
- 主键约束
- 每张数据表只能存在一个主键
- 主键保证记录的唯一性
- 主键自动为NOT NULL
mysql> create table `user3`(
-> id smallint unsigned primary key auto_increment,
-> username varchar(30) not null
-> );
Query OK, 0 rows affected (0.07 sec)
查看表的字段
mysql> show columns from `user3`;
+----------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+----------------+
| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(30) | NO | | NULL | |
+----------+----------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
插入记录
mysql> insert `user3` (username) values('漩涡鸣人');
Query OK, 1 row affected (0.01 sec)
mysql> insert `user3` (username) values('春野樱');
Query OK, 1 row affected (0.01 sec)
mysql> insert `user3` (username) values('宇智波佐助');
Query OK, 1 row affected (0.04 sec)
查看表的记录是否自增
mysql> select * from `user3`;
+----+-----------------+
| id | username |
+----+-----------------+
| 1 | 漩涡鸣人 |
| 2 | 春野樱 |
| 3 | 宇智波佐助 |
+----+-----------------+
3 rows in set (0.01 sec)
2-14 初涉唯一约束
UNIQUE KEY
- 唯一约束
- 唯一约束可以保证字段的唯一性
- 唯一约束的字段可以为空值(NULL)
- 每张数据表可以存在多个唯一键
mysql> create table `user5`(
-> id smallint unsigned primary key auto_increment,
-> username varchar(20) not null unique key,
-> age tinyint unsigned
-> );
Query OK, 0 rows affected (0.08 sec)
创建一个包含主键和唯一键 的表
往表里面唯一字段插入记录,相同记录再次插入error提示Duplicate(重复);
mysql> insert `user5`(username,age) values('漩涡玖辛奈',30);
Query OK, 1 row affected (0.00 sec)
mysql> insert `user5`(username,age) values('漩涡玖辛奈',30);
ERROR 1062 (23000): Duplicate entry '漩涡玖辛奈' for key 'username'
2-15 初涉默认约束
DEFAULT
- 默认值
- 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值
mysql> create table `user6`(
-> id tinyint unsigned primary key auto_increment,
-> username varchar(20) not null,
-> sex enum('1','2','3') default '3'
-> );
Query OK, 0 rows affected (0.10 sec)
mysql> show columns from `user6`;
+----------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+----------------+
| id | tinyint(3) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(20) | NO | | NULL | |
| sex | enum('1','2','3') | YES | | 3 | |
+----------+---------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
当插入记录没有明确复制,sex字段就会赋默认值
mysql> insert `user6` (username) values('旗木卡卡西');
Query OK, 1 row affected (0.00 sec)
mysql> select * from `user6`;
+----+-----------------+------+
| id | username | sex |
+----+-----------------+------+
| 1 | 旗木卡卡西 | 3 |
+----+-----------------+------+
1 row in set (0.01 sec)