最近又看了一遍mysql的入门,总结如下:
1、union和union all都可以起到关联结果集的作用,区别在于,union会自动去除关联的两个结果集中的重复数据,union all则不会主动去除两个结果集中的重复数据,会展示所有的数据;
2、insert、update、delete等操作时,一般来说在项目中select操作是最频繁的也是最紧急的,因此一般在进行其他操作时如果想降低优先级,可以使用low_priority关键字;例如:
INSERT LOW_PRIORITY INTO `db_sql`.`customers` ( `cust_id`, `cust_name`, `cust_address`, `cust_city`, `cust_state`, `cust_zip`, `cust_country`, `cust_contact`, `cust_email` )
VALUES
( 16, 'Pep E.LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL );
3、insert、update多行数据时,一般某行报错后会导致后续sql都不能继续执行,此时可以在sql中加入ignore关键字;例如
INSERT IGNORE INTO `db_sql`.`customers` ( `cust_id`, `cust_name`, `cust_address`, `cust_city`, `cust_state`, `cust_zip`, `cust_country`, `cust_contact`, `cust_email` )
VALUES
( 6, 'Pep E.LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL );
4、delete和truncate都可以删除表中的数据,delete可以分别删除单行或者多行数据,truncate table可以删除表中所有数据,清空表。在实际操作中,对于delete关键字mysql是逐行执行删除行操作,对truncate table 操作实际中mysql是删除原来的整个表结构以及表中的所有数据内容,然后重新新建一张完全一样的空表。
5、create 操作如果对该表需要有建立全文本搜索的字段,则该表需要指定支持全文本搜索的引擎,对于mysql不是所有的引擎都支持全文本搜索,常用的引擎有InnoDB和MyISAM。InnoDB不支持全文本搜索,而MyISAM支持全文本搜索。在新建表的时候,可用 if not exists 先判断库中是否已存在同名表结构,例如:
CREATE TABLE
IF NOT EXISTS `custnew` (
`cust_id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`cust_name` CHAR ( 50 ),
`cust_address`CHAR ( 50 ),
`cust_city` CHAR ( 50 ),
`cust_state`CHAR ( 50 ),
`cust_zip` CHAR ( 50 ),
`cust_country` CHAR ( 50 ),
`cust_contact` CHAR ( 50 ),
`cust_email` CHAR ( 255 ),
PRIMARY KEY ( `cust_id` ) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 1 CHARACTER
SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
6、在新建表的时候,如果没有指定表字段为 not null ,则会默认是可以为null;在 not null 的字段中可以指定默认值为‘’(两个单引号中间没有字符),这被认为是一个空串。空串与null不是一个定义,null是没有数据,空串是一个有效值。
7、对于主键ID使用了auto_increment时,获取刚刚插入的主键值可以使用 select last_insert_id();
8、mysql不支持函数作为默认值,只支持常量作为默认值。与其他的DBMS不一样。