mysql表的操作
表的创建命令需要:
- 表的名称
- 字段名称
- 定义每个字段(类型、长度等)
具体语法
通用创建语法
CREATE TABLE table_name (column_name column_type);
复制代码
一个具体例子:
create table tutorials_tbl(
tutorial_id INT NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( tutorial_id )
);
复制代码
一些常用约束,
NOT NULL ---非空
AUTU_INCREMENT ----自增(适用于int)
PRIMARY KEY ---主键
MySQL删除表
通用语法
DROP TABLE table_name ;
复制代码
MySQL插入数据
想要将数据插入到MySQL表,需要使用SQL INSERT INTO命令。 可以通过用mysql>提示符或通过使用像PHP脚本将任何数据插入到MySQL表。
通用语法
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
复制代码
select查询语句
通用语法:
SELECT field1, field2,...fieldN
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
复制代码
CAUTION:
- 可以使用分隔的一个或多个逗号从多个表,以及使用WHERE子句包括各种条件,但WHERE子句是SELECT命令的可选部分
- 可以在一个SELECT命令指定读取一个或多个字段
- 可以指定星号(*)代替选择的字段。在这种情况下,将返回所有字段
- 可以指定任意的条件在 WHERE 子句后面
- 可以使用OFFSET指定一个偏移量,SELECT从那里开始返回记录。默认情况下 offset 的值是 0
- 可以使用LIMIT属性限制返回的数量
where子句
通用语法:
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
复制代码
- 可以使用逗号分隔一个或多个表,以及WHERE子句包括各种条件,但WHERE子句只是SELECT命令的可选部分
- 可以指定使用任何条件在WHERE子句中
- 可以指定一个以上的条件在使用AND或OR运算符中
- WHERE子句可以用DELETE 或 UPDATE的SQL命令一起,也可以指定一个条件使用。
WHERE 子句就相当于一个if条件语句,用来比较定值的字段值在Mysql表中是否可用。如果从外部给定值等于mysql中的可用值,那么返回该行
从一个表中提取所选的行,尤其使用mysql联接的where子句是非常有用的。
操作符 | 描述 | 示例 |
---|---|---|
= | 检查两个操作数的值是否相等,如果是,则条件变为真。 | (A = B) 不为 true |
!= | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | (A != B) 为 true. |
> | 检查左操作数的值是否大于右操作数的值,如果是,则条件为真。 | (A > B) 不为 tru |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件为真。 | (A < B) 为 true. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件为真。 | (A >= B) 不为 true. |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件变为真。 | (A <= B) 为 true. |
update查询
用来修改现有数据
通用语法:
php UPDATE table_name SET field1=new-value1, field2=new-value2[WHERE Clause]
复制代码
CAUTION:
- 完全可以更新一个或多个字段。
- 可以指定使用任何条件在WHERE子句中。
- 可以一次更新一个表中的值。
delete查询
通用语法:
DELETE FROM table_name [WHERE Clause]
复制代码
CAUTION:
- 如果WHERE子句没有指定,则所有MySQL表中的记录将被删除。
- 可以指定使用任何条件在WHERE子句中。
- 可以一次删除一个表中的所有记录。
like子句
=号可以用来精确匹配,like可以用来进行模糊匹配
通用语法:
SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
复制代码
CAUTION:
- 可以指定使用任何条件在WHERE子句中
- 可以使用LIKE子句在WHERE子句中
- 可以使用LIKE子句代替等号(=)
- 当LIKE连同%符号使用,那么它就会像一个元字符的搜索
- 可以指定一个以上的条件使用AND或OR运算符
- WHERE... LIKE子句可以使用SQL命令的DELETE 或 UPDATE ,也可以指定一个条件
Order By子句
通用语法:
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
复制代码
CAUTION:
- 可以排序返回所列出提供的任何字段的结果
- 可以在多个字段排序结果
- 可以使用关键字ASC或DESC来执行升序或降序排序。默认情况下,按升序排列
- 可以使用WHERE ... LIKE子句以通用的方式放置条件
NULL值
不能直接=NULL来比较
- IS NULL: 如果列的值为NULL,运算结果返回 true
- IS NOT NULL: 如果列的值不为NULL,运算结果返回 true
- <=>: 运算符比较值,(不同于=运算符)即使两个空值它返回 true
基本的正则表达式
连同REGEXP运算符使用
模式 | 什么样的模式匹配 |
---|---|
^ | 开始的一个字符串 |
$ | 结束的一个字符串 |
. | 任意单个字符 |
[...] | 方括号中列出的任何字符 |
[^...] | 任何字符方括号之间不会被列出 |
p1|p2|p3 | 交替;匹配的任何模式 p1, p2, 或 p3 |
* | 前一个元素的零个或多个实例 |
+ | 前面元素的一或多个实例 |
{n} | 前一个元素的n个实例 |
{m,n} | 前一个元素的 m 到 n 个实例 |
eg.
在这里,列出一些的理解。考虑有一个表称为 person_tbl,它是有一个 name 字段:
- 查询查找所有以 “st” 开头的名字:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';
复制代码
- 查询找到所有以 'ok' 结尾的名字
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';
复制代码
- 查询查找其中包含 'mar' 所有的名字
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';
复制代码
- 查询查找以元音 'ok' 结尾的所有名称
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
复制代码
ALTER命令
当想改变表名,MySQL的ALTER命令非常有用, 在添加或删除任何表字段到现有列在表中。
让我们开始创建一个表为 testalter_tbl。
root@host# mysql -u root -p password;
Enter password:
mysql> use test;
Database changed
mysql> create table testalter_tbl
-> (
-> i INT,
-> c CHAR(1)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i | int(11) | YES | | NULL | |
| c | char(1) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
复制代码
删除,添加或重新定义列
假设想要从上面MySQL的表中删除一个现有列,那么使用ALTER命令以及DROP子句如下:
mysql> ALTER TABLE testalter_tbl DROP i;
复制代码
如果在表中列是唯一的一个,那么DROP将无法正常工作。
要添加列,使用ADD并指定列定义。下面的语句将存储到 i 列:testalter_tbl:
mysql> ALTER TABLE testalter_tbl ADD i INT;
复制代码
发出这条语句后,testalter将包含当第一次创建表时的两列, 但不会有完全一样的结构。这是因为新的列被添加到表中时,默认排在最后一列。因此,即使 i 列原来是 mytbl 的第一列,但现在它是最后一列。
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
复制代码
若要指示列在表中的特定位置,要么使用FIRST把它放在第一列或AFTER col_name 来指定新的列应放置col_name之后。 试试下面的ALTER TABLE语句,使用 SHOW COLUMNS 看看有什么影响:
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
复制代码
FIRST 和 AFTER 只能在ADD子句中使用。这意味着,如果你想在表中重新排位现有列,首先必须删除(DROP )它,然后在新的位置添加(ADD)它。
更改列定义或名称
要改变列的定义,使用MODIFY 或CHANGE 子句以及ALTER命令。 例如, 要改变字段 c 从 CHAR(1) 修改为 CHAR(10), 那么可以这样做:
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
复制代码
CHANGE语法可能有点不同。CHANGE关键字后的名称是要修改的列,然后指定新的定义,其中包括新的名称。试试下面的例子:
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
复制代码
如果现在使用CHANGE转换i列从BIGINT为INT,但不改变列名,该语句执行预期:
mysql> ALTER TABLE testalter_tbl CHANGE j j INT;
复制代码
ALTER TABLE影响Null和缺省值属性
当使用 MODIFY 或 CHANGE修改列,还可以指定该列是否能为NULL值以及它的默认值。事实上,如果你不这样做,MySQL也会自动分配这些属性值。
下面是一个例子,这里 NOT NULL列将使用100作为默认值。
mysql> ALTER TABLE testalter_tbl
-> MODIFY j BIGINT NOT NULL DEFAULT 100;
复制代码
如果不使用上面的命令,那么MySQL将填补使用NULL 来填充所有列值。
更改列的默认值
可以使用ALTER命令更改任何列的默认值。尝试下面的例子。
mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | 1000 | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
复制代码
从任何一列删除默认的约束,可以使用ALTER命令以及DROP子句。
mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c | char(1) | YES | | NULL | |
| i | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
复制代码
更改表类型
可以通过使用ALTER命令以及TYPE子句修改表的类型。试试下面的例子,将 testalter_tbl 的类型更改为MyISAM 表类型。
若想要知道一个表的当前类型,那么可使用 SHOW TABLE STATUS 语句。
mysql> ALTER TABLE testalter_tbl TYPE = MYISAM;
mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. row ****************
Name: testalter_tbl
Type: MyISAM
Row_format: Fixed
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 25769803775
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2015-06-03 18:35:36
Update_time: 2015-06-03 18:35:36
Check_time: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
复制代码
重命名表
要重命名表,使用ALTER TABLE语句的RENAME选项。试试下面的例子是用来重命名testalter_tbl为alter_tbl。
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
复制代码