表基本操作

创建表

  1. Create table student(
  2. Sno char(9),
  3. Same char(20),
  4. Ssex char(2),
  5. Sage smallint,
  6. Sdept char(20)
  7. );
  8. Create table course(
  9. Cno char(4),
  10. Cname char(40),
  11. Cpno char(4),
  12. Ccredit smallint
  13. );
  14. Create table sc(
  15. Sno char(9),
  16. Cno char(4),
  17. Grade smallint
  18. );
  19. Insert into student values('200215121','李勇','男',20,'cs');
  20. Insert into student values('200215122','刘晨','女',19,'cs');
  21. Insert into student values('200215123','王敏','女',18,'ma');
  22. Insert into student values('200515124','张立','男',19,'is');
  23. Insert into course values ('1','数据库','5',4);
  24. Insert into course values ('2','数学',NULL,2);
  25. Insert into course values('3','信息系统','1',4);
  26. Insert into course values('4','操作系统','6',3);
  27. Insert into course values('5','数据结构','7',4);
  28. Insert into course values('6','数据处理',NULL,2);
  29. Insert into course values('7','pascal语言','6',4);
  30. Insert into sc values('200215121','1',92);
  31. Insert into sc values('200215121','2',85);
  32. Insert into sc values('200215121','3',88);
  33. Insert into sc values('200215122','2',90);
  34. Insert into sc values('200215122','3',80);

查看表

  1. SHOW TABLES [FROM db_name] [LIKE 'pattern'|WHEAR expr];

查看列(表的组织结构)

  1. SHOW COLUMNS FROM tb_name;
  2. DESC tb_name;

以上两条语句都可以。

查看表的内容

  1. SELECT * FROM tb_name;

插入数据

  1. INSERT [INTO] tb_name [(col_name,...)] VALUES(val,...);

如果不指明任何字段名,那么插入的数据必须要包含所有的字段。

插入记录

共有三种Insert语句。

INSERT

  1. INSERT [INTO] tb_name [(col_name,.....)] {VALUE|VALUES} ({expr|DEFAULT},...) (...),...
  • values是标准SQL关键字,value是MySQL自己的。
  • 插入语句可以一次性插入多条记录。
  • 值可以是:
    • 函数
    • 数学表达式

默认值

在创建数据表的时候可以设置DEFAUTL。

  1. CREATE TABLE users(
  2. id SAMLLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  3. username SAMLLINT VARCHAR(20) NOT NULL,
  4. password SAMLLINT VARCHAR(20) NOT NULL,
  5. age TINYINT UNSIGNED NOT NULL DEFAULT 10,
  6. sex BOOLEAN
  7. );

INSERT的时候如果为自动编号的字段(比如上表中主键id)赋值的话,可写作NULL,或DEFAULT就会采用默认值。
如果字段设置了DEFAULT(比如上表中age),那么值直接写DEFAULT就行,注意此时,不能为NULL。例如:

  1. INSERT users VALUES(NULL,'TOM','123',DEFAULT,1);

INSERT…SET

  1. INSERT [INTO] tb_name SET col_name={expr|DEFAULT},...

采用了子查询。例如,上表中插入:

  1. INSERT users SET username='Ben',password='456';

因为id,和age都有默认值,所以可以不写。而sex允许为空,也可以不写。

INSERT…SELECT*

将查找的结果写入记录中。

  1. INSERT test(username) SELECT username FROM users WHERE age >=30;

删除记录

同样分为:

  • 单表删除
  • 多表删除
  1. DELETE FROM tb_name [WHERE where_condition];

没有where部分则会删除全部记录。

更新记录-单表更新

更新记录分为:

  • 单表更新
  • 多表更新(要涉及连接)

单表更新

  1. UPDATE [LOW_PRIORITY] [IGNORE] tb_reference
  2. SET col_name1={expr|DEFAULT} [,col_name2={expr|DEFAULT}]...
  3. [WHERE where_condition]

不写where会更新全部的记录。

更新记录-连接(多表更新)

多表更新

  1. UPDATE table_references
  2. SET col_name1={expr1|DEFAULT}
  3. [,col_name2={expr2|DEFAULT}]...
  4. [WHERE where_condition]

CREATE…SELECT

创建数据表同时将查询结果写入到数据表

  1. CREATE TABLE [IF NOT EXISTS]tb_name
  2. [(create_definetion,...)]
  3. select_statement

比如:

  1. CREATE TABLE tall (
  2. tall_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  3. num INT
  4. ) SELECT 身高 AS num FROM
  5. av
  6. GROUP BY 身高;

创建新表tall,并从av表中选取身高字段插入到tall表的num字段。

连接

语法结构

  1. table_reference
  2. {[INNER|CROSS] JOIN|{LELT|RIGHT}[OUTER] JOIN}
  3. table_reference
  4. ON conditional_expr

ON为条件。
三种连接,即:

  • 内连接
  • 左外连接
  • 右外连接

内连接

显示左表及右表符合连接条件的记录(交集)

左外连接

显示左表的全部记录及右表符合连接条件的记录

右外连接

类别左外连接

UPDATE..JOIN..SET

比如

  1. UPDATE actor AS a
  2. INNER JOIN
  3. tall AS b ON a.tall = b.num
  4. SET
  5. a.tall = b.tall_id;

依据实际情况,选择是否使用别名。(如果两个表中进行比较的字段名相同,则需要别名)
该语句完成了一个替换,将actor表中具体的身高数值,替换为tall表中身高的对应id。

修改数据表

所有的数据表的修改SQL语句的开头都是ALTER TABLE+表名称。

给表改名

  1. ALTER TABLE tb_name RENAME {TO|AS} tb_new_name;

另外有个写法是:

  1. RENAME TABLE tb_name TO tb_new_name;

这句可以批量修改多个表的名称。

尽量不要随意修改表的名称。对视图有影响。

添加/删除列

插入列

  1. ALTER TABLE tb_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name];

默认会插入到表的最下面,指定FIRST,则置于最上面,或者用AFTER col_name 指定为col_name的下面。

删除列

  1. ALTER TABLE tb_name DROP col_name,DROP.....;

可以一次性删除多个列。

修改列

修改列定义

即修改列的属性。

  1. ALTER TABLE tb_name MODIFY col_name column_definition [FIRST|AFTER col_name];

比如:

  1. ALTER TABLE test ADD id SMALLINT unsigned KEY auto_increment first;

key可以表示主键,无需primary。fitrst表示插入的位置。

如果要修改的列已经是主键了,则修改列定义的时候再加上主键字段会报错。

修改列名

  1. ALTER TABLE tb_name CHANGE col_name col_new_name column_definition [FIRST|AFTER col_name];

修改列名时,新列名后面要指明数据类型。

修改列顺序

其实同上,具体比如:

  1. ALTER TABLE `user` CHANGE `join_time` `join_time` DATE NULL DEFAULT NULL AFTER `role`;

把join_time列放到role列后面。

修改约束

PRIMARY KEY

添加主键约束

  1. ALTER TABLE tb_name ADD [CONSTRAIN[symbol]] PRIMARY KEY [index.type] (index_col_name,.....);

删除主键约束

  1. ALTER TABLE tb_name DROP [index.type] PRIMARY KEY;

不需要指定列名,因为每个表只有一个主键。
注意!只有一个主键并不意味着主键只有一列。

UNIQUE

添加唯一约束

  1. ALTER TABLE tb_name ADD [index.type] unique(col_name);

删除唯一约束

  1. ALTER TABLE tb_name DROP [index.type] unique(col_name);

DEFAULT

  1. ALTER TABLE tb_name ALTER [COLUMN] col_name {SET DEFAULT literal|DROP DEFAULT};
  2. for example:
  3. ALTER TABLE users ALTER age SET DEFAULT 20;

FOREIGN KEY

添加外键约束

  1. ALTER TABLE tb_name ADD [CONSTRAIN[symbol]] FOREIGN KEY [index_name](index_col_name,...)reference_definition;
  2. for example:
  3. ALTER TABLE users add FOREIGN KEY (pid) REFERENCE provinces (id);

删除外键约束

  1. ALTER TABLE tb_name DROP FOREIGN KEY fk_symbol;