练习题
1.1
编写一条 CREATE TABLE 语句,用来创建一个包含表 1-A 中所列各项的表 Addressbook (地址簿),并为 regist_no (注册编号)列设置主键约束
表1-A 表 Addressbook (地址簿)中的列
CREATE TABLE Addressbook (
register_no int NOT NULL,
name VARCHAR(128) NOT NULL,
address VARCHAR(256) NOT NULL,
tel_no CHAR(10),
mail_address CHAR(20),
PRIMARY KEY (register_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 表?
ALTER TABLE 语句和 DROP TABLE 语句一样,执行之后无法恢复。误添加的列可以通过 ALTER TABLE 语句删除,或者将表全部删除之后重新再创建。
待解决
还可以向表中插入默认值(初始值)。可以通过在创建表的CREATE TABLE 语句中设置DEFAULT约束来设定默认值。
CREATE TABLE productins
(product_id CHAR(4) NOT NULL,
(略)
sale_price INTEGER
(略) DEFAULT 0, – 销售单价的默认值设定为0;
PRIMARY KEY (product_id));
设置了DEFAULT 20 不知道去哪里看效果
- 如何创建索引
创建表时可以直接创建索引,语法如下:
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
也可以使用如下语句创建:
– 方法1
CREATE INDEX indexName ON table_name (column_name)
– 方法2
ALTER table tableName ADD INDEX indexName(columnName)
- 全文索引
利用“分词技术”实现在长文本中搜索关键字的一种索引。
语法:SELECT * FROM article WHERE MATCH (col1,col2,…) AGAINST (expr [ search _ modifier ])
1、MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;
2、MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;
3、只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。
4、如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。 - 单列索引
建立在单个列上的索引被称为单列索引。 - 联合索引(复合索引、多列索引)
建立在多个列上的索引被称为联合索引,又叫复合索引、组合索引。
纠错
1.2.8最后一部分有错误
单行注释应该是 –
START TRANSACTION; 中间不能没有空格
扩展
下面四条语句提供对 事务 (transactions) 使用的控制:
- START TRANSACTION或 BEGIN开始新的事务。
- COMMIT提交当前事务,使其更改永久化。
- ROLLBACK回滚 (rolls back) 当前事务,取消其更改。
- SET autocommit禁用或启用当前会话的默认自动提交模式。
默认情况下,MySQL 在 启用自动提交 (autocommit) 模式的情况下运行。这意味着,当不在事务中时,每个语句都是atomic的,就好像它被START TRANSACTION和COMMIT包围一样。您不能使用ROLLBACK撤消效果;但是,如果在语句执行期间发生错误,the statement is rolled back.。
roll back: restore (a database) to a previously defined state. typically to recover from an error.
参考链接:
https://dev.mysql.com/doc/refman/8.0/en/commit.html
https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glos_transaction
https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E4%BA%8B%E5%8A%A1
https://github.com/datawhalechina/wonderful-sql/blob/main/ch01:%20%E5%88%9D%E8%AF%86%E6%95%B0%E6%8D%AE%E5%BA%93.md#129-%E7%B4%A2%E5%BC%95