SQL 基础知识总结

1、创建table

mysql> create table tmd(id int(11) not null,name varchar(100),ts timestamp);
Query OK, 0 rows affected (0.14 sec)

mysql> desc tmd;
+-------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | | NULL | |
| name | varchar(100) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+--------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.09 sec)

2、修改表字段属性

mysql> alter table tmd modify id int(9) not null;
Query OK, 0 rows affected (0.12 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc tmd;
+-------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+-------------------+-----------------------------+
| id | int(9) | NO | | NULL | |
| name | varchar(100) | YES | | NULL | |
| ts | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+--------------+------+-----+-------------------+-----------------------------+
3 rows in set (0.06 sec)

3、从现有表创建新表

mysql> create table love as select * from tmd;
Query OK, 1 row affected (0.12 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> select * from love;
+----+-------+---------------------+
| id | name | ts |
+----+-------+---------------------+
| 1 | ricky | 2011-12-14 00:35:14 |
+----+-------+---------------------+
1 row in set (0.00 sec)

4、删除表

drop table table_name;

5、主键约束

primary_key(id)

6、唯一性约束

unique

7、外键约束

foreign key emp_id_fk(emp_id) references emp(emp_id)

alter table emp_pay add constraint id_fk foreign key(emp_id) reference emp(emp_id);

8、check约束

foreign key emp_id_fk(emp_id) references emp(emp_id) constraint check_id check (id >10);


9、增删改查

insert into table_name values('','');

update table_name set column_name = 'value' [where condition];

delete from table_name [where condition];

select * from table_name

 

10、事务控制

事务控制的命令有3条:

    commit

    rollback

    savepoint

    事务控制仅用户dml命令中(insert、update、delete)。

commit:

mysql> delete from love where id < 2;

Query OK, 1 row affected (0.00 sec)

mysql> commit
-> ;
Query OK, 0 rows affected (0.00 sec)

 

rollback:

mysql> update love set name = 'end' where id =2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from love;
+----+------+---------------------+
| id | name | ts |
+----+------+---------------------+
| 2 | end | 2011-12-14 00:55:15 |
+----+------+---------------------+
1 row in set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)


11、查询

select、from、where、order by

mysql> select count(*) from love;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)


12、操作符

= ,<>, <, >

相等,不等性,小于、大于

is null

between and

where in

like操作符连接的匹配符有两种:

百分号(%) 代表零个字符、一个字符或多个字符

下划线(_)代表单个数字或字符

exists

unique

all 用于将某个数值同另一数据集中的每个数值进行比较

any

and

or

not: not in、 not exists、not between、 not like、is not null

加减乘除


13、统计查询结果

count

sum

max

min

avg


14、数据的排序以及分组

group by & order by

mysql> select name,count(*) from tmd group by name;
+-------+----------+
| name | count(*) |
+-------+----------+
| munto | 1 |
| ricky | 1 |
+-------+----------+


mysql> select name,count(*) from tmd group by name order by id;
+-------+----------+
| name | count(*) |
+-------+----------+
| ricky | 1 |
| munto | 1 |
+-------+----------+
2 rows in set (0.00 sec)


15、复杂的数据库查询

表连接

equijoins(inner join)

nature joins

non-equijoins

outer joins

self joins

等号连接:使用一个公共列来连接两个表。

mysql> select userlocation.user_id from userlocation,userhobby where userlocation.user_id = userhobby.user_id and userhobby.hobby_id in (20,21,22,23);
+------------+
| user_id |
+------------+
| 1659078210 |
+------------+
1 row in set (0.00 sec)


自然连接:natural join

不等行连接:!=或者<>


外部连接:(用于返回存在于一张表上的所有数据行,甚至相对应的行在连接的表中不存在。)

left outer join

right outer join

full outer join

mysql> select userhobby.user_id from userhobby join userlocation on userlocation.user_id = userhobby.user_id and userhobby.hobby_id in (20,21,22,23);
+------------+
| user_id |
+------------+
| 1659078210 |
| 1659078211 |
+------------+
2 rows in set (0.00 sec)

 

mysql> select userhobby.user_id from userhobby left join userlocation on userlocation.user_id = userhobby.user_id and userhobby.hobby_id in (20,21,22,23);
+------------+
| user_id |
+------------+
| 1659078210 |
| 1659078211 |
| 1659078212 |
+------------+
3 rows in set (0.00 sec)


暂时整理到此。。。








 


 

 

 


posted @ 2011-12-14 02:28  1Q84  阅读(218)  评论(0编辑  收藏  举报