公告栏

此网站主题为本人手写主题, 主题待开源···

音乐盒

站点信息

文章总数目: 308
已运行时间: 1187
目录
  1. 创建表
  2. 查看表
  3. 查看列(表的组织结构)
  4. 查看表的内容
  5. 插入数据
  6. INSERT
  7. INSERT...SET
  8. INSERT...SELECT*
  9. 多表更新
  10. CREATE...SELECT
  11. 连接
    1. 语法结构
      1. 内连接
      2. 左外连接
      3. 右外连接
    2. UPDATE..JOIN..SET
  12. 给表改名
  13. 添加/删除列
    1. 插入列
    2. 删除列
  14. 修改列
    1. 修改列定义
    2. 修改列名
    3. 修改列顺序
  15. 修改约束
    1. PRIMARY KEY
    2. UNIQUE
    3. DEFAULT
    4. FOREIGN KEY
尼采般地抒情

尼采般地抒情

尼采般地抒情

公告栏

此网站主题为本人手写主题, 主题待开源···

站点信息

文章总数目: 308
已运行时间: 1187

表基本操作

创建表



Create table student(
    Sno char(9),
    Same char(20),
    Ssex char(2),
    Sage smallint,
    Sdept char(20)
);
Create table course(
    Cno char(4),
    Cname char(40),
    Cpno char(4),
    Ccredit smallint
);
Create table sc(
    Sno char(9),
    Cno char(4),
    Grade smallint
);
Insert into student values('200215121','李勇','男',20,'cs');
Insert into student values('200215122','刘晨','女',19,'cs');
Insert into student values('200215123','王敏','女',18,'ma');
Insert into student values('200515124','张立','男',19,'is');  
Insert into course values ('1','数据库','5',4);
Insert into course values ('2','数学',NULL,2);    
Insert into course values('3','信息系统','1',4);
Insert into course values('4','操作系统','6',3);
Insert into course values('5','数据结构','7',4);
Insert into course values('6','数据处理',NULL,2);
Insert into course values('7','pascal语言','6',4);
Insert into sc values('200215121','1',92);
Insert into sc values('200215121','2',85);
Insert into sc values('200215121','3',88);
Insert into sc values('200215122','2',90);
Insert into sc values('200215122','3',80);

查看表


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


查看列(表的组织结构)


    SHOW COLUMNS FROM tb_name;
    DESC tb_name;


以上两条语句都可以。


查看表的内容


    SELECT * FROM tb_name;


插入数据


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


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


插入记录


共有三种Insert语句。


INSERT


INSERT [INTO] tb_name [(col_name,.....)] {VALUE|VALUES} ({expr|DEFAULT},...) (...),...


  • values是标准SQL关键字,value是MySQL自己的。
  • 插入语句可以一次性插入多条记录。
  • 值可以是:
    • 函数
    • 数学表达式


默认值


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


CREATE TABLE users(
    id SAMLLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username SAMLLINT VARCHAR(20) NOT NULL,
    password SAMLLINT VARCHAR(20) NOT NULL,
    age TINYINT UNSIGNED NOT NULL DEFAULT 10,
    sex BOOLEAN
);


INSERT的时候如果为自动编号的字段(比如上表中主键id)赋值的话,可写作NULL,或DEFAULT就会采用默认值。

如果字段设置了DEFAULT(比如上表中age),那么值直接写DEFAULT就行,注意此时,不能为NULL。例如:


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


INSERT...SET


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


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


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


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


INSERT...SELECT*


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


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


删除记录


同样分为:


  • 单表删除
  • 多表删除


DELETE FROM tb_name [WHERE where_condition];


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

更新记录-单表更新

更新记录分为:


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


单表更新

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


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

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


多表更新


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


CREATE...SELECT


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


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


比如:


CREATE TABLE tall (
    tall_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    num INT
) SELECT 身高 AS num FROM
    av
GROUP BY 身高;


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


连接


语法结构


table_reference
{[INNER|CROSS] JOIN|{LELT|RIGHT}[OUTER] JOIN}
table_reference
ON conditional_expr


ON为条件。

三种连接,即:


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


内连接


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


左外连接


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


右外连接


类别左外连接


UPDATE..JOIN..SET


比如


UPDATE actor AS a
        INNER JOIN
    tall AS b ON a.tall = b.num 
SET 
    a.tall = b.tall_id;


依据实际情况,选择是否使用别名。(如果两个表中进行比较的字段名相同,则需要别名)

该语句完成了一个替换,将actor表中具体的身高数值,替换为tall表中身高的对应id。



修改数据表


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


给表改名


ALTER TABLE tb_name RENAME {TO|AS} tb_new_name;


另外有个写法是:


RENAME TABLE tb_name TO tb_new_name;


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


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


添加/删除列


插入列


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


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


删除列


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


可以一次性删除多个列。


修改列


修改列定义


即修改列的属性。


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


比如:


ALTER TABLE test ADD id SMALLINT unsigned KEY auto_increment first;


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


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


修改列名


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


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


修改列顺序


其实同上,具体比如:


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


把join_time列放到role列后面。


修改约束


PRIMARY KEY


添加主键约束


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


删除主键约束


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


不需要指定列名,因为每个表只有一个主键。

注意!只有一个主键并不意味着主键只有一列。


UNIQUE


添加唯一约束


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


删除唯一约束


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


DEFAULT


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


FOREIGN KEY


添加外键约束


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


删除外键约束


ALTER TABLE tb_name DROP FOREIGN KEY fk_symbol;

评论区

Twikoo giscus