MySQL基础教程(三)—表操作
文章目录
1. MySQL表数据类型
数字类型
整数: 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’);
结果:
- MySQL基础教程11-Mysql删除数据表操作
- MySQL基础教程26-数据高级操作-更新
- PHP特级课视频教程_第十五集 MySQL基础操作(一)_李强强
- PHP特级课视频教程_第十六集 MySQL基础操作(二)_李强强
- PHP PDO操作MySQL基础教程
- MySQL基础教程2-创建表和列操作
- PHP特级视频教程 笔记心得 第十七集 mysql调优,mysql优化 MySQL基础操作(一)
- MySQL基础教程10-Mysql数据表修改操作
- PHP特级视频教程 笔记心得 第十五集 mysql调优,mysql优化 MySQL基础操作(一)
- PHP特级视频教程 笔记心得 第十六集 mysql调优,mysql优化 MySQL基础操作(一)
- MySQL基础教程8-Mysql数据表新增操作
- MySQL基础教程25-数据高级操作-新增
- MySQL基础教程15 —— SQL语法之数据操作语句DML——DELETE语法
- MySQL的日志基础知识及基本操作学习教程
- MySQL基础教程9-Mysql数据表查看操作
- PDO操作MySQL的基础教程(推荐)
- MySQL基础教程7-Mysql数据库CRUD操作
- MySQL的日志基础知识及基本操作学习教程
- Linux下将数据库从MySQL迁移到MariaDB的基础操作教程
- Linux下将数据库从MySQL迁移到MariaDB的基础操作教程