学习内容
1.MySQL 表数据类型
MySQL 支持数值、日期时间和字符串三种类型。
具体的类型说明可以参考菜鸟教程的总结
2. 用SQL语句创建表
CREATE TABLE table_name
(
prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL DEFAULT 0.00,
prod_desc TEXT(1000) NULL
);
语句解释
- CREATE TABLE name 设定表的名字;
- 列 定义在圆括号内,列与列之间用 , 分隔;
- 需要指明列的的类型、大小和约束
类型包括数值、字符和日期类型;
NULL / NOT NULL
表示是否允许该列缺值;如果不指定NOT NULL 则默认 NULL;DEFAULT
指明默认值。
- 设定主键
参考
建表时使用 primary key 来指明
CREATE TABLE tableName(
id INT PRIMARY KEY
);
-- OR
CREATE TABLE tableName(
id INT,
PRIMARY KEY (id)
);
建完表之后,增加主键
ALTER TABLE tableName ADD PRIMARY KEY(id)
3. 用SQL语句向表中添加数据
INSERT INTO table_name
VALUES(xxxxx);
语句解释: 向表中插入数据,数据在VALUES 子句中给出;VALUES 按照创建表的列的顺序填写(这样会不安全);
- 指定列名(推荐使用这种方式)
INSERT INTO Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
VALUES('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
没有指明的列是空的(要求没指出的列允许空或者有默认值);
4. 用SQL语句删除表
DROP TABBLE table_name;
语句解释, DROP 永久删除表,没有确认也不能撤销;
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete。
DELETE 删除行
DROP 删除表
TRUNCATE 保留表,删除数据
5. 用SQL语句修改表
ALTER TABLE
- 修改列名
-- 将test字段改为test1
-- ALTER TABLE 表名 CHANGE 原字段名 新字段名 字段类型 约束条件
ALTER TABLE user10 CHANGE test test1 CHAR(32) NOT NULL DEFAULT '123';
- 修改表中数据
--修改列类型
ALTER TABLE tableName
ALTER COLUMN columnName VARCHAR(4000)
--修改数据
update 表名 set 列名='需要修改的值' where 列名='原来的值'
- 删除行
DELETE FROM 表名称
WHERE 列名称 = 值
- 删除列
ALTER TABLE Vendors
DROP COLUMN vend_phone;
- 新建列
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
- 新建行
INSERT INTO tablename [(columns, ...)]
VALUES(values, ...)
- 重命名表
ALTER TABLE test RENAME test1
作业
- 1.项目三:超过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名学生的课。
Note:
学生在每个课中不应被重复计算。
解答:
CREATE TABLE courses(
student VARCHAR(64) NOT NULL,
class VARCHAR(20)
);
INSERT INTO courses VALUES('A','Math');
INSERT INTO courses VALUES('B','English');
INSERT INTO courses VALUES('C','Math');
INSERT INTO courses VALUES('D','Biology');
INSERT INTO courses VALUES('E','Math');
INSERT INTO courses VALUES('F','Computer');
INSERT INTO courses VALUES('G','Math');
INSERT INTO courses VALUES('H','Math');
INSERT INTO courses VALUES('I','Math');
INSERT INTO courses VALUES('A','Math');
SELECT class
FROM courses
GROUP BY class
HAVING COUNT(DISTINCT student)>=5
-
- 项目四:交换工资(难度:简单)
创建一个 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,反之亦然)。要求使用一个更新查询,并且没有中间临时表。
运行你所编写的查询语句之后,将会得到以下表:
| id | name | sex | salary |
|----|------|-----|--------|
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
CREATE TABLE salary(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex CHAR NOT NULL,
salary int
);
INSERT INTO salary VALUES(1,'A','m',2500);
INSERT INTO salary VALUES(2,'B','f',5500);
INSERT INTO salary VALUES(3,'C','m',5000);
INSERT INTO salary VALUES(4,'D','f',1500);
INSERT INTO salary VALUES(5,'E','f',2000);
UPDATE salary
SET sex =
CASE
WHEN sex='f' THEN 'm'
WHEN sex='m' THEN 'f'
ELSE sex
END;
SELECT * FROM salary;
参考链接
参考了以下博客