摘要:选学了MySQL Workbench进行SQL连接。在创建表格的时候采用的是小括号,使用VARCHAR或者CHAR的时候,后面跟的也是小括号,不要跟C语言搞混了。name在MySQL中颜色不对,不建议使用,不过结果好像没问题。插入列是ALTER TABLE,插入数据是INSERT INTO,INSERT INTO 是VALUES ,复数,删除表格的命令是DROP TABLE。
第0章 环境搭建
1.MySQL环境搭建
2.连接MySQL并执行SQL查询
2.1命令行方式(知道即可,不采用此种方式)
-
是最基本的方式,点击下方工具 -
红框处是版本号 -
缺点:查找与数据导出不方便,语句修改与调试也不方便、
2.2 MySQL workbench
- 连接数据库
- CTRL+U 或者 点击选项卡:Database—> Connect to Database
- 养成好习惯,表名用小写字母。MySQL服务器对大小写敏感,而Windows对大小写不敏感,有点乱,表名用小写字母。
第1章 初识数据库
1.1 初识数据库
-
名词解释
- 数据库(Database,DB)
- 数据库管理系统(Database Management System,DBMS)
-
DBMS的种类,DBMS主要通过数据的保存格式(数据库的种类)进行分类,主要有5种类型:
-
层次数据库(Hierarchical Database,HDB) -
关系数据库(Relational Database,RDB)
- Oracle Database:甲骨文公司的RDBMS
- SQL Server:微软公司的RDBMS
- DB2:IBM公司的RDBMS
- PostgreSQL:开源的RDBMS
- MySQL:开源的RDBMS
- 注:以上是具有代表性的RDBMS,其特点是由行和列组成的 二维表来管理数据,这种类型的DBMS称为关系数据库管理系统。
-
面向对象数据库(Object Oriented Database,OODB) -
XML数据库(XML Database,XMLDB) -
键值存储系统(Key-Value Store,KVS),举例,MongoDB -
本次学习的是关系型数据库RDBMS,RDBMS的常见系统结构是客户端/服务器类型(C/S类型)
1.2 初识SQL
-
在数据库中,行称为记录,列称为字段,行列交汇的地方称为单元格 -
SQL语句可以分为以下3类(实际操作中90%属于DML)
- DDL(Data Definition Language)数据定义语言,用来创建,修改,删除
- CREATE:创建数据库和表等对象
- DROP:删除数据库和表等对象
- ALTER:修改数据库和表等对象
- DML(Data Manipulation Language)数据操控语言,查询,修改,删除
- SELECT:查询数据
- INSERT:插入数据
- UPDATE:更新数据
- DELETE:删除数据
- DCL(Data Control Language)数据控制语言,用来确认或者取消对于数据库中的数据进行的变更。还可以对用户权限进行设定。
- COMMIT:确认变更
- ROLLBACK:取消变更
- GRANT:赋予用户操作权限
- REVOKE:取消用户操作权限
-
SQL的基本书写规则
- 以分号(;)结尾,跟C语言类似
- SQL不区分关键字的大小写,但是插入到表中的数据是区分大小写的
- win不区分大小写,Linux和mac系统区分大小写
- 常数的书写方式是固定的
- “abc”
- “1234”
- “2010-01-26”,日期采用短横线连接
- “10/01/26"
- “26 Jan 2010”
- 单词需要用半角空格或者换行来分隔
- 不能使用全角空格来分隔
-
建立数据库
-
数据库的建立
-
CREATE DATABASE shop;
-
表的建立,注释采用“#”、
/
?
?
/
/**/
/??/、–空格 CREATE TABLE product
(
product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
PRIMARY KEY(product_id)
);
-
命名规则 ? 数字,字母,下划线作为数据库 表和列的名称;只能是字母开头 -
数据类型
- INTEGER,整数型
- CHAR,定长字符串,没达到最大的时候,会采用半角空格进行补足,由于会浪费存储空间,所以一般不用
- VARCHAR,存储可变长度字符串,即使达不到长度,也不会使用半角空格填补
- DATE,日期型
-
约束的设置
- NOT NULL,非空约束,必须填入数值
- PRIMARY KEY,主键约束,代表该列是唯一值,可以用来定位数据
-
表的删除和更新(ALTER与DROP操作不可恢复)
-
删除表的语法(无法恢复)
- DROP TABLE 表名,DROP TABLE product;
- 删除的表无法恢复,只能重新插入
-
添加列的语句
- ALTER TABLE 表名 ADD COLUMN 列定义
- ALTER TABLE product ADD COLUMN product_name_pinyin VARCHAR(100);
-
删除列的语句(无法恢复)
- ALTER TABLE 表名 DROP COLUMN 列名;
- ALTER TABLE product DROP COLUMN product_name_pinyin ;
-
删除表中特定行
-
DELETE FROM product WHERE COLUNMN_NAME="XXX";
-
清空表内容与更新
-
清空表格
- TRUNCATE TABLE TABLE_NAME;
- TRUNCATE比DELETE、DROP更快
-
更新
-
UPDATE table_name
SET column_name1=表达式1,
column_name2=表达式2;
WHERE 条件;
ORDER BY子句;
LIMIT 子句;
UPDATE product
SET regist_date="2020-10-10";
UPDATE product
SET regist_date="2020-10-10"
WHERE product_type="厨房用具";
UPDATE product
SET sale_price = sale_price * 10,
purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
-
-
NULL清空
-
UPDATE product
SET register_date=NULL
WHERE product_id="008";
-
插入数据
-
INSERT INTO TBALE_NAME (COLUMN1 COLUMN2) VALUES (VALUE1,VALUE2) -
如果插入一行的话,可以省略列名,不可用省略表名,是VALUES,复数 -
INSERT INTO 是插入数据的,插入一列是ALTER TABLE table_name ADD COLUMN 类型 限制; -
执行一次INSERT会插入一条语句,很多支持一次插入多行
-
INSERT INTO product VALUES (1,2,3)
(4,5,6)
INSERT ALL INTO productins VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11')
INTO productins VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL)
INTO productins VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20')
-
INSERT INTO也可以插入NULL -
创建列的时候,可以写DEFAULT 0作为约束 -
INSERT INTO productcopy (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
SELECT product_id, product_name, product_type, sale_price,
purchase_price, regist_date
FROM Product;
-
索引
-
创建索引的3种方式
-
CREATE TABLE mytable
{
ID INT NOT NULL,
INDEX(ID)
};
CREATE [UNIQUE] INDEX index_name ON table_name(column_list)
ALTER TABLE table_name ADD INDEX index_name(column_list)
ALTER TABLE table_name ADD UNIQUE(column_list)
ALTER TABLE table_name PRIMARY KEY (column_list)
-
索引分类
- 主键索引,只能有一个
- 唯一索引,UNIQUE字段,可以有多个,允许有多个空值
- 普通索引,建立在普通字段上
- 前缀索引,字符类的前几个字符,char,vchar,binary,varbinary
- 全文索引,建立在char,varchar,text,建完表再创全文索引
- 单列索引
- 联合索引
练习题
1.1
问题:编写一条 CREATE TABLE 语句,用来创建一个包含表 1-A 中所列各项的表 Addressbook (地址簿),并为 regist_no (注册编号)列设置主键约束
表1-A 表 Addressbook (地址簿)中的列
答案:
CREATE TABLE addressbook
(
regist_no INTEGER NOT NULL,
name_ VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_address char(20),
PRIMARY KEY(regist_no)
);
创建完表格记得点击下图中刷新按钮(居然不会自动刷新???😲)
1.2
问题:假设在创建练习1.1中的 Addressbook 表时忘记添加如下一列 postal_code (邮政编码)了,请编写 SQL 把此列添加到 Addressbook 表中。
列名 : postal_code
数据类型 :定长字符串类型(长度为 8)
约束 :不能为 NULL
ALTER TABLE addressbook ADD COLUMN postal_code CHAR(8) NOT NULL
1.3 填空题
请补充如下 SQL 语句来删除 Addressbook 表。
( DROP ) TABLE Addressbook;
1.4 判断题
是否可以编写 SQL 语句来恢复删除掉的 Addressbook 表?
答:不可以
|