MySQL必知必会—概念篇mysql
MySQL必知必会—检索数据篇github
利用 CREATE TABLE 建立表,必须紧跟着给出新表的名字,而后是表列的名字和定义,用逗号分隔。segmentfault
NULL 值就是没有值或缺值。容许 NULL 值的列也容许在插入行时不给出该列的值。 NOT NULL 即不容许 NULL 值的列不接受该列没有值的行,在插入或更新行时,该列必须有值。NULL 是默认设置,若是不指定 NOT NULL,则认为指定的是 NULL。安全
主键必须是惟一的,即表中的每一个行必须具备惟一的主键值,若是主键使用单个列,则它的值必须惟一。若是使用多个列,则这些列的组合值必须惟一。服务器
使用相似 PRIMARY KEY (id) 的语句来定义。为建立由多个列组成的主键,应该以逗号分隔的列表给出各列名,例如 orderitems 表的建立用到的 PRIMARY KEY (order_num, order_item)函数
主键能够在建立表时定义,或者在建立表以后定义。性能
主键为惟一标识表中每一个行的列,主键中只能使用不容许 NULL 值的列。
每次执行一个 INSERT 操做时, MySQL 自动对该列增量。
每一个表只能容许一个 AUTO_INCREMENT 列,并且它必须被索引(好比经过使用它成为主键)
在执行 INSERT 时能够给 AUTO_INCREMENT指定一个值,只要它是至今为止惟一的就行,该值将被用来替代自动生成的值。后续的增量将开始使用该手工插入的值。
last_insert_id() 这个函数能返回最后一个 AUTO_INCREMENT 值
列定义中的 DEFAULT 关键字指定。 MySQL 跟大多数 DBMS 同样, 不容许使用函数做为默认值,它只支持常量。
大多数时候, CREATE TABLE 语句全都以 ENGINE=InnoDB 语句结束。MySQL具备多种引擎,这些打包的多个引擎都隐藏在 MySQL 的服务器内,全都能执行 CREATE TABLE 和 SELECT 等命令。这些引擎具备各自不一样的功能和特性,为不一样的任务选择正确的引擎能得到良好的功能和灵活性。
InnoDB 是一个可靠的事务处理引擎,它不支持全文本搜索。
MyISAM 是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理
MEMORY 在功能等同于 MyISAM,但因为数据存储在内存(不是磁盘)中,速度很快(特别适合用于临时表)
######################## # 看一下 customers 表的建立 ######################## CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL , cust_address char(50) NULL , cust_city char(50) NULL , cust_state char(5) NULL , cust_zip char(10) NULL , cust_country char(50) NULL , cust_contact char(50) NULL , cust_email char(255) NULL , PRIMARY KEY (cust_id) ) ENGINE=InnoDB;
为了更新表定义,可以使用 ALTER TABLE 语句。
### vendors 表中增长 vend_phone 列 ALTER TABLE vendors ADD vend_phone CHAR(20); ### 删除刚刚增长的 vend_phone 列 ALTER TABLE vendors DROP COLUMN vend_phone; ### ALTER TABLE 常见的用途就是定义外键 ALTER TABLE products ADD CONSTRAINT fk_products_vendors FOREIGN KEY (vend_id) REFERENCES vendors (vend_id)
DROP TABLE customers2;
### 重命名一个表 RENAME TABLE customers2 TO customers; ### 重命名多个表 RENAME TABLE backup_customers TO customers,backup_vendors TO vendors;
### 以下的语句中,对每一个列必须提供一个值,若是某个列没有值,应该使用 NULL 值(假设表容许对该列指定空值)。每一个列必须按照顺序给出,自动增量的值也不能忽略,并且若是不想赋值,就须要指定为 NULL 。 INSERT INTO customers VALUES( NULL, 'Pep E. LaPew', '100 Main Street', 'Los Angeles', 'CA', '90046', 'USA', NULL, NULL);
上面的语法应该避免使用,由于不安全,建议用下面的语句,能够不按照次序填充,只要保证 VALUES中的次序跟前面给出的列名次序一致就行。
INSERT INTO customers(cust_name, cust_contact, cust_email, cust_address, cust_city, cust_state, cust_zip, cust_country) VALUES('Pep E. LaPew', NULL, NULL, '100 Main Street', 'Los ANGELES', 'CA', '90046', 'USA');
### 可使用多条 INSERT 语句,甚至一次提交它们,每条语句用一个分号结束。 INSERT INTO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) VALUES('Pep E. LaPew','100 Main Street','Los Angeles','CA','90046','USA');INSERT INTO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) VALUES('M. Martian','42 Galaxy Way','New York','NY','11213','USA'); ### 或者每条 INSERT 语句中的列名(和次序)相同,能够以下组合语句 INSERT INTO customers(cust_name,cust_address,cust_city,cust_state,cust_zip,cust_country) VALUES('Pep E. LaPew','100 Main Street','Los Angeles','CA','90046','USA'), ('M. Martian','42 Galaxy Way','New York','NY','11213','USA');
### 更新id是10009客户名字的邮箱。 UPDATE customers SET cust_name = 'The Fudds', cust_email = 'elmer@fudd.com' WHERE cust_id = 10009; ### 为了删除某个列的值,可设置它为 NULL(假定表定义为容许 NULL 值) UPDATE customers SET cust_email = NULL WHERE cust_id = 10009;
UPDATE IGNORE customers
### 删除10011这一行 DELETE FROM customers WHERE cust_id = 10011;
一个持续更新的github笔记,连接地址:Front-End-Basics,能够watch,也能够star。
此篇文章的地址:MySql必知必会