MySQL 基础知识1 (表的创建和更新)
一、表的创建方式
1. 使用具有交互式创建和管理表的工具
2. 直接使用MySQL语句操
3. 示例1:这里以第二种方式创建一个表名为 test 的例子:
/* 使用SQL语句创表:不指定if not exists语句创建表 */ CREATE TABLE test ( test_id INT NOT NULL AUTO_INCREMENT, test_name CHAR(50) NOT NULL, test_state CHAR(50) NULL, test_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (test_id) )ENGINE=INNODB; /* 使用SQL语句创表:指定if not exists语句创建表*/ CREATE TABLE IF NOT EXISTS test ( test_id INT NOT NULL AUTO_INCREMENT, test_name CHAR(50) NOT NULL, test_state CHAR(50) NULL, test_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (test_id) )ENGINE=INNODB
二、创建表的主要技巧
1. MySQL不允许使用函数作为默认值, 它只支持常量
2. 使用默认值而不是NULL值, 特别是对用于计算或数据分组的列尤为重要
3. 使用NULL值:不要将NULL值与空串相混淆, NULL值是没有值,它不是空串;如果指定''(或一对双引号),其间没有字符, 这在NOT NULL列中是允许的,
空串是一个有效的值, 它不是无值, NULL值用关键字NULL而不是空串指定
三、主键再介绍
1. 主键值必须唯一,即表中的每行必须具有唯一的主键值
2. 主键值可分为单列主键和组合主键
3. 主键中只能使用不允许NULL值的列, 允许NULL值得列不能作为唯一标识
4. 示例2:这里简单创建一个组合主键(即两个及以上的主键,可以来自其他不同表的主键)
CREATE TABLE IF NOT EXISTS test ( test_id INT NOT NULL AUTO_INCREMENT, test_num INT NO NULL, test_name CHAR(50) NOT NULL, test_state CHAR(50) NULL, test_date TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (test_id, test_num) )ENGINE=INNODB
四、更新表结构
1. 关键字:ALTER TABLE之后给出需要更改的表名
2. 所做更改的列表
3. 注意:使用ALTER TABLE语句要极为小心, 应该在进行改动前做一个完整的备份(模式和数据的备份);数据表的更改不能撤销, 若增加不需要的列, 可能不能删除它们; 若删除了不该删除的列, 则可能导致该列所有数据丢失
4. 示例3:添加列和删除列
ALTER TABLE vendors ADD vend_phone CHAR(20); -- 添加列 ALTER TABLE vendors DROP COLUMN vend_phone; -- 删除列
主要用途:定义外键
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCES orders (order_num); ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (cust_id) REFERENCES customers (cust_id);
五、重命名和删除表
RENAME TABLE test TO demo; -- 重命名单表 RENAME TABLE demo1 TO test1, demo2 TO test2, demo3 TO test3; -- 重命名多表
DROP TABLE test1; -- 删除单表 DROP TABLE test2, test3, test4, test5; -- 删除多表
六、MySQL引擎类型对比
1.INNODB:一个可靠的事务处理引擎, 但它不支持全文本搜索
2.MyISAM:一个性能极高的引擎, 它支持全文本搜索,但不支持事务处理
3.MEMORY:在功能上等同于MyISAM, 但由于数据存储在内存中, 速度很快(特别适合于临时表)
4.FULLTEXT关键字:
(1). 不要在导入数据的时候时候该关键字, 在更新索引的时候需要花费少量时间;
(2). 如果正在导入数据到一个新表,,此时不应该启用FULLTEXT索引, 应该首先导入所有数据,然后再修改表, 定义FULLTEXT, 这样将有助于更快地导入数据
SELECT note_text FROM productnotes WHERE MATCH(note_text) Against('rabbit'); SELECT note_text FROM productnotes WHERE note_text LIKE '%rabbit%'; SELECT note_text, MATCH(note_text) Against('rabbit') AS rank FROM productnotes;
5.注意:引擎类型可以混用, 但缺陷在于:外键不能跨引擎, 即使用一个表的引擎不能引用具有不同引擎的表的外键

浙公网安备 33010602011771号