您的位置:首页 > 数据库 > MySQL

MySQL基础教程(三)—表操作

2019-03-01 21:47 344 查看

文章目录

  • 2. 用SQL语句创建表
  • 3. 用SQL语句向表中添加数据
  • 4. 用SQL语句删除表
  • DROP
  • TRUNCATE
  • 5. 用SQL语句修改表
  • 作业
  • 1. MySQL表数据类型

    参考教程:Yue Chen caimaoy.github

    数字类型

    整数: tinyint、smallint、mediumint、int、bigint
    浮点数: float、double、real、decimal

    日期和时间

    date、time、datetime、timestamp、year

    字符串类型

    字符串: char、varchar
    文本: tinytext、text、mediumtext、longtext

    二进制

    二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob

    2. 用SQL语句创建表

    CREATE TABLE [IF NOT EXISTS] table_name(column_list)

    • creat table后要跟表名, [IF NOT EXISTS] 是为了防止表名重复而覆盖前面已有的表名。若新命名的表名存在,则不会创建表,语句不执行。

    设定列

    • 指定列的名称。
    • 设置列的数据类型和大小,例如:VARCHAR(255)。
    • 设置是否允许空值:NOT NULL或NULL表示该列是否接受NULL值。
    • 指定列的默认值:DEFAULT,如 DEFAULT 1,表示该列默认值为1
    • AUTO_INCREMENT指示每当将新行插入到表中时,列的值会自动增加。每个表都有一个且只有一个AUTO_INCREMENT列。

    示例

    CREATE TABLE IF NOT EXISTS tasks (
    task_id INT(11) NOT NULL AUTO_INCREMENT,
    subject VARCHAR(45) DEFAULT NULL,
    start_date DATE DEFAULT NULL,
    end_date DATE DEFAULT NULL,
    description VARCHAR(200) DEFAULT NULL,
    PRIMARY KEY (task_id)
    ) ENGINE=InnoDB;

    注意 :各字段之间以逗号连接,最后一行不用加逗号。

    设定主键

    • 设置主键的方式有两种,分别是:一、直接在每列的定义行里加上 PRIMARY KEY,二、定义完所有列后,另起一行 加上 PRIMARY KEY (col1,col2,…)。

    3. 用SQL语句向表中添加数据

    INSERT INTO table(column1,column2…)
    VALUES (value1,value2,…);

    • 向表中插入数据时有两种方法,一种是指定列名;另一种是不指定列名。

    指定列名

    • 列名的顺序可以不按照表中列的顺序,可以随便排列;
    • 可以不列出全部列名,只插入部分列数据,前提是其它列允许空值或有默认值。

    不指定列名

    • 若不指定列名,则默认插入全部列的数据。
      注意:虽然使用不指定列名的方法比较简单,但是这种方法很不安全,若表结构发生了变化,则插入的数据会错位甚至会出错。指定列名的方法则不管表中列的顺序发生什么变化,都能够匹配到相应列。

    插入多行数据

    INSERT INTO table(column1,column2…)
    VALUES (value1,value2,…),
    (value1,value2,…),

    每行的值要用逗号分隔

    4. 用SQL语句删除表

    DELETE

    • DELETE用来删除整行,可以删除一个表中的所有行,也可以删除含有指定条件的行。

    删除所有行

    DELETE FROM table_name

    注意: 只是清空表中数据,不会删除表。

    删除部分行

    DELETE FROM table_name
    WHERE condition;

    DELETE FROM table
    LIMIT row_count;

    注意 :使用带where字句的select语句前,应该先用select进行测试,保证它过滤的是正确的记录。

    DROP

    • DROP TABLE命令不但会删除表中所有数据,还会将整个表结构从数据库中移除。如果想要重新向表中存储数据的话,必须重建该数据表。

    DROP TABLE table_name ;

    • DROP DATABASE 可用来删除数据库。

    DROP DATABASE database_name;

    TRUNCATE

    • SQL TRUNCATE TABLE 命令用于删除现有数据表中的所有数据。(不删除表结构)

    TRUNCATE TABLE table_name;

    5. 用SQL语句修改表

    • ALTER TABLE语句可用来添加列,删除列,更改列的数据类型,添加主键,重命名表等等

    修改列名

    ** ALTER TABLE table_name CHANGE old_name new_name {type}**

    • 使用 CHANGE 子句, 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。

    修改列数据类型

    ALTER TABLE table_name MODIFY column_name CHAR(10);

    修改表中数据

    UPDATE table_name SET WHERE ;

    删除列

    ALTER TABLE table_name DROP COLUMN column_name;

    添加列

    ALTER TABLE table_name ADD ;

    作业

    练习三:超过5名学生的课(难度:简单)
    创建如下所示的courses 表 ,有: student (学生) 和 class (课程)。
    例如,表:
    ±--------±-----------+
    | student | class |
    ±--------±-----------+
    | A | Math |
    | B | English |
    | C | Math |
    | D | Biology |
    | E | Math |
    | F | Computer |
    | G | Math |
    | H | Math |
    | I | Math |
    | A | Math |
    ±--------±-----------+

    编写一个 SQL 查询,列出所有超过或等于5名学生的课。
    学生在每个课中不应被重复计算。

    CREATE TABLE courses(
    student CHAR,
    class VARCHAR(30)
    );

    INSERT INTO courses
    VALUES(“A”,“Math”),
    (“B”,“English”),
    (“C”,“Math”),
    (“D”,“Biology”),
    (“E”,“Math”),
    (“F”,“Computer”),
    (“G”,“Math”),
    (“H”,“Math”),
    (“I”,“Math”),
    (“A”,“Math”)

    SELECT class,COUNT(class)
    FROM(
    SELECT DISTINCT *
    FROM courses
    ) AS each
    GROUP BY class
    HAVING COUNT(class) >= 5

    输出结果

    笔记:from嵌套表作为一个派生表必须有自己的名字,因为在嵌套查询中,子查询的结果是作为一个派生表给上一级进行查询,所以子查询的结果必须有一个别名。
    项目四:交换工资(难度:简单)
    创建一个 salary表,如下所示,有m=男性 和 f=女性的值 。
    例如:

    id name sex salary
    1 A m 2500
    2 B f 1500
    3 C m 5500
    4 D f 500

    交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求使用一个更新查询,并且没有中间临时表。

    CREATE TABLE salary(
    id INT NOT NULL ,
    n_ame VARCHAR(50) NOT NULL,
    sex VARCHAR(50) NOT NULL,
    salary INT NOT NULL
    );

    INSERT INTO salary
    VALUES (1,‘A’,‘m’,2500),
    (2,‘B’,‘f’,1500),
    (3,‘C’,‘m’,5500),
    (4,‘D’,‘f’,500)

    UPDATE salary SET sex = IF(sex = ‘m’,‘f’,‘m’);

    结果:

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: