您的位置:首页 > 数据库 > MySQL

mysql 表操作{创建|查询|修改|删除}

2011-09-05 07:48 489 查看
什么是表

:table

逻辑上 每一个表在数据库中包含了行和列

表可以为0行 但至少要有一列 表同样支持索引的查询

物理上 每个表由一个或多个文件在磁盘上保存

每一个表的存储 在数据库中目录中都有对应的文件系统格式

表空间:比表大而比数据库小的物理单位

创建表

help CREATE TABLE

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name ( //
新建一个表

(create_definition,...)

[table_option]...

);

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name ( //
选择已知表的字段并创建

[(create_definition,...)]

[table_option] ...

SELECT [select_statement]

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name ( //
参照已知表进行创建

{ LIKE old_tbl_name | (LIKE old_tbl_name)} 字段与字段间用 , 隔开

查看如何创建

SHOW CREATE TABLE tbl_name;

-----------------------------------------------------------------------------------------------------------------------------------------------------------

e.g.

CREATE TABLE employee (

id INT NOT NULL,

last_name CHAR(30) NOT NULL,

first_name CHAR(30) NOT NULL,

UNIQUE (id),

INDEX (last_name, first_name)

);

CREATE TABLE ... SELECT can create a table that is empty or non-empty, depending on what is returned by the SELECT part

CREATE TABLE ... LIKE creates an empty table using the definition of another existing table

CREATE TABLE tbl_name (

ID INT UNSIGNED AUTO_INCREMENT NOT NULL,

------------------------------------------------------------------------------------------------------------------------------------------------------------

单表查询:



查看当前表所使用的的引擎

SHOW ENGINES;

AUTO_INCREMENT = value 指定增长值

创建表指定索引类型

USING {BTREE|HASH}

直接使用CREATE创建索引

CREATE INDEX index_name ON tbl_name (col..)

创建表指定存储引擎

CREATE TABLE user(id INT)ENGINE = InnoDB;

ALTER TABLE user ENGINE = MyISAM;

设定默认引擎

SET GLOBAL storage_engine = engine_name;

SET SESSION storage_engine = engine_name;

查询选择数据

字段名不区分大小写

SELECT column1, col2 FROM table_name
// 选定 指定字段 并显示 project 投影

字段给定的次序 就是显示次序

SELECT * FROM table_name //
查询表中所有字段

选择过滤条件

WHERE //
指定选定行

查询条件如下:

>, <, =, !=, LIKE, BETWEEN...AND.., IN, IS NULL(空), IS NOT NULL

LIKE // 模糊匹配

% 匹配任意长度任意字符

_ 匹配任意长度任单个字符

BETWEEN...AND.. // 匹配特定条件

IN // 在特定集合符合条件的行显示出来

REGEXP ( RLIKE ) // 支持正则表达式 模式匹配

AND (&&), OR (||), NOT (!) XOR 异或

过滤后 进行排序

ORDER BY col_name {ASC|AESC}

ASC // 升序排列 {默认}

DESC // 降序排列

检索的结果 只看哪些行

LIMIT N //
显示前N 行

LIMIT N,M // 从第N行开始 一共显示M行

DISTINCT // 合并相同的结果选项

e.g. SELECT DISTINGCT field_name FROM tbl_name

对结果进行分组: 分组后做聚合 统计有多少行

GROUP BY //
选定行 以字段相同的值进行分组

COUNT(*) // 统计数据

对GROUP BY 结果进行过滤 // 分组以后在进行过滤

HAVING

表中的字段名 显示可以和 选择的不同 AS //改变显示名字

内置了N多的函数 增加使用效果

参照 MYSQL 官方手册

聚合函数

COUNT(*), MAX(), MIN(), AVG(), SUM()

除了函数 还可以使用变量

SET @num=10 // 设置变量为10

应用声明要使用@

===============================================================================================

修改表结构

ALTER TABLE t1 CHANGE a b INTERGER; //
把一个INTERGER列的名称从a变到b

ALTER TABLE t1 MODIFY b b BIGINIT NOU NULL // 修改类型 修改定义和位置 而不改变字段名

可以使用FIRST或AFTER col_name在一个表行中的某个特定位置添加列。默认把列添加到最后。您也可以在CHANGE或MODIFY语句中使用FIRST和AFTER

-------------------------------------------------------------------------------------------

ALTER TABLE tbl_name MODIFY col_name col_definition 改变位置

ALTER TABLE tbl_name CHANGE col_name col_definition

--------------------------------------------------------------------------------------------

添加一个新字段

ADD {FIRST | AFTER} col_name col_definition

添加索引:

ADD {INDEX|KEY} [index_name] [index_type] (col..)

index_type: BTREE、HASH、RTREE、FULLTEXT

删除格式:

DROP col_name; //删除字段

DROP PRIMARY KEY; // 删除主键

DROP {INDEX|KEY} index_name; // 删除索引

删除数据

DELETE FORM table [WHERE cloue] ;

重命名表:

重命名是新建一个新表 把老表数据复制过去然后删除老表

1. ALTER TABLE old_name RENAME TO new_name;

2. RENAME TABLE old_name
TO new_name;

插入数据

INSERT INTO table_name(col1,col2)
VALUES (val1,val2) //插入值也可以不指字段

REPLACE // 有重复的值替换 避免出错

INSERT 还支持一次插入多行

修改数据 : DML

UPDATE table_name SET col1=val1[, ...] [WHERE clause] //需要指定条件 否则更新所有列

e.g. UPDATE knight SET AGE=18 WHERE UID=1

help TRUNCATE;

SELECT LAST_INSERT_ID(); // 记录最后的ID 行

TRUNCATE TABLE table_name; // 清空表中的所有数据 并重1开始计数

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

多表查询

两张表如何组织起来:

JOIN, 连接 基于某种方式 把表组合起来

连接的种类

1.交叉连接,CROSS JOIN 笛卡尔乘积 //
一般很少用 但是适用所有情况 在内存中临时存储 在 磁盘上存储 结果 所以是非常非常的慢

2.内连接,INNER JOIN 对称连接

基于等值条件 左右表同时出现 且值相等

如果字段名字相同 就要引用表前缀 table_name.col_name

3.外连接 OUTER JOIN

左外连接 LEFT JOIN ON

左边有 右边显示NULL // 左表显示的有的全显示 右边有的显示 没有的显示NULL

右外连接 RIGHT JOIN [ON] on 指条件

左边NULL 右边显示

全外连接 FULL JOIN

都显示出来 左表有的右表没有 右表有的左表没

4.自连接 SELF JOIN 自己与自己相连接

5.UNION 结果组合连接起来

将两个表的查询结果合成一个
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐