表包含的概念:
1.表:数据库中存储数据的数据库对象,每个数据库包含若干表,表由行和列组成。
2.表结构:每个表具有一定的结构,表结构包含一组固定的列列,由数据类型,长度,允许Null、键、默认值等组成。
3.记录:每个表包含若干行数据,表中一行称为一个数据。
4.段表:表中每列称为字段,每个记录由若干数据项(列)构成,构成记录的每个数据项就称为字段。
5.空值(Null):通常表示未知、不可用或将在以后添加的数据。
6.关键字:关键字用于唯一标识记录。如果表中记录的某一字段或字段组合能唯一标识记录,则该字段或字段组合称之为选键。如果一个表有多个候选键,则选定其中一个为主键。
7.默认值:默认值只在插入数据时,当然没有明确给出某列的值。系统为此列指定一个值。
数据类型:
1.整型类型:包括tinyint、smallint、mediumint、int、bigint等类型。
2.定点数类型:用于存储定点数,必需保存为确切精度的值。
3.浮点数类型:包括单精度浮点数float类型和双精度浮点类型double类型。
4.字符串类型:有char(n)、varchar(n)、tinytext、text等。
5.日期和时间类型:有date、time、datetime、timestamp、year。
6.二进制数据类型:有bit、binary、varbinary、tinyblob、blob、mediumblob、longblob。
7.枚举类型:
enum(成员1,成员2,成员3,···)
8.集合类型:
set(成员1,成员2,成员3,···)
数据类型的选择:
一、般来讲,数据类型的选择遵循以下原则
一、在符合应用要求(取值范围、精度)的前提下,尽量使用“短”数据类型。
二、数据类型越简单越好。
三、尽量采用精确小数据类型(如decimal),而不采用浮点数类型。
四、在MySQL中。应该用内置的日期和时间数据类型,而不是用字符串来存储日期和时间。
五、尽量避免字段的属性为Null。建议将字段定义为Not Null约束。
创建表:
在学生信息数据库(stusys)中创建student表
学生表(student)的结构
-----------------------------------------------------------------------------
列名 数据类型 允许NULL值 键 默认值 说明
-----------------------------------------------------------------------------
sno char(6) 无 主键 无 学号
-----------------------------------------------------------------------------
sname char(8) 无 无 姓名
-----------------------------------------------------------------------------
ssex char(2) 无 男 性别
-----------------------------------------------------------------------------
sbirthday date 无 无 出生日期
-----------------------------------------------------------------------------
speciality char(12) 有 无 专业
-----------------------------------------------------------------------------
tc tinyint 有 无 总学分
-----------------------------------------------------------------------------
mysql> use stusys;
Database changed
mysql> create table student
-> (
-> sno char(6) not null primary key,
-> sname char(8) not null,
-> ssex char(2) not null default '男',
-> sbirthday date not null,
-> speciality char(12) null,
-> tc tinyint null
-> );
执行结果:
Query OK, 0 rows affected (0.01 sec)
复制已有表:
在数据库stusys中,使用复制方式创建student1表,表结构取自student表
mysql> use stusys;
Database changed
mysql> create table student1 like student;
执行结果:
Query OK, 0 rows affected (0.01 sec)
查看表:
查看数据库stusys中的所有表名
mysql> use stusys;
Database changed
mysql> show tables;
执行结果:
+------------------+
| Tables_in_stusys |
+------------------+
| student |
| student1 |
+------------------+
2 rows in set (0.00 sec)
查看表的基本结构:
查看数据库stusys中student表的基本结构
mysql> show columns from student;
执行结果:
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| sno | char(6) | NO | PRI | NULL | |
| sname | char(8) | NO | | NULL | |
| ssex | char(2) | NO | | 男 | |
| sbirthday | date | NO | | NULL | |
| speciality | char(12) | YES | | NULL | |
| tc | tinyint | YES | | NULL | |
+------------+----------+------+-----+---------+-------+
6 rows in set (0.00 sec)
查看表的详细结构:
查看数据库stusys中student表的详细结构
mysql> show create table student\G
执行结果:
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`sno` char(6) NOT NULL,
`sname` char(8) NOT NULL,
`ssex` char(2) NOT NULL DEFAULT '男',
`sbirthday` date NOT NULL,
`speciality` char(12) DEFAULT NULL,
`tc` tinyint DEFAULT NULL,
PRIMARY KEY (`sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
修改表:
1.添加列
在数据库stusys的student1表中增加一列sid,添加到表的第一列,不为空,取值唯一并自动增加
mysql> alter table stusys.student1
-> add column sid int not null unique auto_increment first;
执行结果:
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
使用DESC语句查看student1表
mysql> DESC stusys.student1;
执行结果:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| sid | int | NO | UNI | NULL | auto_increment |
| sno | char(6) | NO | PRI | NULL | |
| sname | char(8) | NO | | NULL | |
| ssex | char(2) | NO | | 男 | |
| sbirthday | date | NO | | NULL | |
| speciality | char(12) | YES | | NULL | |
| tc | tinyint | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
2.修改列
将数据库stusys的student1表的sbirthday列修改为sage,将数据类型改为tinyint,可为空,默认值为18
mysql> alter table stusys.student1
-> change column sbirthday sage tinyint default 18;
执行结果:
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
使用DESC语句查看student1表
mysql> DESC stusys.student1;
执行结果:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| sid | int | NO | UNI | NULL | auto_increment |
| sno | char(6) | NO | PRI | NULL | |
| sname | char(8) | NO | | NULL | |
| ssex | char(2) | NO | | 男 | |
| sage | tinyint | YES | | 18 | |
| speciality | char(12) | YES | | NULL | |
| tc | tinyint | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
3.删除列
删除数据库stusys的student1表中的sid列
mysql> alter table stusys.student1
-> drop column sid;
执行结果:
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
4.重命名表
在数据库stusys中,将student1表重命名为student2表
一、rename to子句:
mysql> alter table stusys.student1
-> rename to stusys.student2;
执行结果:
Query OK, 0 rows affected (0.01 sec)
二、rename table语句
mysql> rename table stusys.student2 to student3;
执行结果:
Query OK, 0 rows affected (0.01 sec)
5.删除表
删除数据库stusys中的student3表
mysql> drop table stusys.student3;
执行结果:
Query OK, 0 rows affected (0.01 sec)