今天整理了一了一下數據表的基本操做,但願能幫助有須要的人!!!!mysql
MySQL 數據庫表操做sql
第1章 表的介紹MySQL中的表就和咱們excel表格中的sheet同樣,一個excel裏面能夠有多個sheet。在MySQL數據庫裏面,一個庫也能夠有多個表,每一個表中記錄了無數條的數據。這些關係型的數據顯示爲列和行(相似excel表格)。咱們隊MySQL的表操做就是對一個sheet操做。數據庫
第2章 表的操做表是存在於數據庫中,因此咱們看的表應該是在某個庫的下面例如:database.sheet表示數據庫database下面的sheet表。下面咱們來學習SQL命令來查看錶:c#
mysql> show tables; +------------------+ | Tables_in_oldboy | +------------------+ | student | | test | | test2 | +------------------+ 3 rows in set (0.01 sec) mysql> show create tabletest\G *************************** 1. row*************************** Table:test Create Table: CREATE TABLE `test` ( `id` int(4)NOT NULL AUTO_INCREMENT, `name`char(20) NOT NULL, PRIMARY KEY(`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULTCHARSET=utf8 1 row in set (0.00 sec) mysql> desc test; +-------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+----------------+ | id |int(4) | NO | PRI | NULL | auto_increment | | name |char(20) | NO | | NULL | | +-------+----------+------+-----+---------+----------------+ 2 rows in set (0.01 sec) 小結: 一、show tables; #顯示庫裏面包含的全部表 二、desc test; #顯示錶的結構 三、show create table test; #顯示建立表的SQL語句
咱們能夠經過help create or help contents來查看幫助bash
mysql> create table student_test( id int(4) notnull, name char(20) not null, age tinyint(2) NOT NULL default '0', dept varchar(16) default NULL ); # 建立一個表爲student_test,有4個字段
能夠經過desc來查看錶的結構ide
mysql> desc student_test; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id |int(4) | NO | | NULL | | | name |char(20) | NO | | NULL | | | age |tinyint(2) | NO | | 0 | | | dept |varchar(16) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
方法一:drop命令學習
mysql> drop table student_test; Query OK, 0 rows affected (0.00 sec) mysql> show tables; +------------------+ | Tables_in_oldboy | +------------------+ | student | | test | | test2 | +------------------+ 3 rows in set (0.00 sec)
方法二:delete命令spa
咱們用上面表建立的命令從新建立表:student_test日誌
create table student_test( id int(4) not null, namechar(20) not null, age tinyint(2) NOTNULL default '0', dept varchar(16) default NULL );
查看錶excel
show tables mysql> show tables; +------------------+ | Tables_in_oldboy | +------------------+ | student | | student_test | | test | | test2 | +------------------+ 4 rows in set (0.00 sec)
刪除表 delete from 表名: 刪除全部記錄,表結構還在,寫日誌,能夠恢復的,速度慢
方法三:truncate
truncate talbe 表名 刪除表中的全部記錄,表結構還在,不寫日誌,沒法找回刪除的記錄,速度快 小結: delete from 表名: 刪除全部記錄,表結構還在,寫日誌,能夠恢復的,速度慢 drop talbe 表名: 刪除表的結構和數據 truncate talbe 表名 刪除表中的全部記錄,表結構還在,不寫日誌,沒法找回刪除的記錄,速度快
使用場合:
當你再也不須要該表時, 用 drop;
當你仍要保留該表,但要刪除全部記錄時, 用 truncate;
當你要刪除部分記錄時(always with a whereclause), 用 delete.
注意:
對於有主外鍵關係的表,不能使用truncate而應該使用不帶where子句的delete語句,因爲truncate不記錄在日誌中,不可以激活觸發器
mysql> alter table student_test add sex char(2)after age; #這裏使用了參數after,表示在什麼以後插入,若是在第一行 QueryOK, 0 rows affected (0.02 sec) firs參數。 Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student_test; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id |int(4) | NO | | NULL | | | name |char(20) | NO | | NULL | | | age |tinyint(2) | NO | | 0 | | | sex | char(2) | YES | | NULL | | | dept |varchar(16) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
mysql> desc student_test; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id |int(4) | NO | | NULL | | | name |char(20) | NO | | NULL | | | age |tinyint(2) | NO | | 0 | | | sex | char(2) | YES | | NULL | | | dept |varchar(16) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) mysql> alter tablestudent_test modify sex varchar(4); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student_test; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id |int(4) | NO | | NULL | | | name |char(20) | NO | | NULL | | | age |tinyint(2) | NO | | 0 | | | sex | varchar(4) | YES | | NULL | | | dept |varchar(16) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
mysql> alter tablestudent_test drop sex; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student_test; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id |int(4) | NO | | NULL | | | name |char(20) | NO | | NULL | | | age |tinyint(2) | NO | | 0 | | | dept |varchar(16) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
mysql> show create table student_test\G *************************** 1. row*************************** Table:student_test Create Table: CREATE TABLE `student_test` ( `id` int(4)NOT NULL, `name`char(20) NOT NULL, `age`tinyint(2) NOT NULL DEFAULT '0', `dept`varchar(16) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> alter tablestudent_test CONVERT TO CHARACTER SET latin1; mysql> show create table student_test\G *************************** 1. row*************************** Table:student_test Create Table: CREATE TABLE `student_test` ( `id` int(4)NOT NULL, `name`char(20) NOT NULL, `age`tinyint(2) NOT NULL DEFAULT '0', `dept`varchar(16) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
把name字段改爲xingming,類型從char改爲varchar
mysql> desc student_test; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id |int(4) | NO | | NULL | | | name | char(20) | NO | | NULL | | | age |tinyint(2) | NO | | 0 | | | dept |varchar(16) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.01 sec) mysql> alter table student_test change columnname xingming varchar(40); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student_test; +----------+-------------+------+-----+---------+-------+ | Field |Type | Null | Key | Default |Extra | +----------+-------------+------+-----+---------+-------+ | id |int(4) | NO | | NULL | | | xingming | varchar(40) | YES | | NULL | | | age |tinyint(2) | NO | | 0 | | | dept |varchar(16) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
把student_test表重命名爲stu_test
m
ysql> rename table student_test to stu_test; Query OK, 0 rows affected (0.02 sec) mysql> show tables; +------------------+ | Tables_in_oldboy | +------------------+ | stu_test | | student | | test | | test2 | +------------------+ 4 rows in set (0.00 sec)第3章 表數據的操做
數據的表的插入使用命令insert,語法insert into 表名
mysql> insert into stu_testvalues(1,'kirk',28,'male'); Query OK, 1 row affected (0.00 sec) mysql> select * from stu_test; +----+----------+-----+------+ | id | xingming | age | dept | +----+----------+-----+------+ | 1 |kirk | 28 | male | +----+----------+-----+------+ 1 row in set (0.00 sec)
ERROR 1300 (HY000): Invalid utf8 character string: '\xA1\xAFaaa\xA1\xAF'
解決辦法:引號問題’ ’這種是GB2312 , ' '這種是utf-8
ERROR 1366 (HY000): Incorrect stringvalue: '\xC4\xD0' for column 'sex' at row 1
解決辦法:show variables like 'chara%';
setcharacter_set_client=gb2312;
該處查看會顯示亂碼
解決方法:set character_set_results=gb2312;
mysql> update stu_test setxingming='laowang' where id=1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from stu_test; +----+----------+-----+------+ | id | xingming | age | dept | +----+----------+-----+------+ | 1 |laowang | 28 | male | | 2 |huasheng | 23 | male | | 3 |dadou | 20 | nv | +----+----------+-----+------+ 3 rows in set (0.00 sec)第4章 表的查詢
mysql> select * from stu_test where xingming='dadou'; +----+----------+-----+------+ | id | xingming | age | dept | +----+----------+-----+------+ | 3 |dadou | 20 | nv | +----+----------+-----+------+ 1 row in set (0.00 sec) mysql> select xingming,age from stu_test; +----------+-----+ | xingming | age | +----------+-----+ | laowang | 28 | | huasheng | 23 | | dadou | 20 | +----------+-----+ 3 rows in set (0.00 sec) +----+----------+-----+------+ | id | xingming | age | dept | +----+----------+-----+------+ | 1 |laowang | 28 | male | | 2 |huasheng | 23 | male | | 3 |dadou | 20 | nv | | 4 |dadou | 20 | male | +----+----------+-----+------+ 4 rows in set (0.00 sec) mysql> select 20 from stu_test; +----+ | 20 | +----+ | 20 | | 20 | | 20 | | 20 | +----+ 4 rows in set (0.00 sec) mysql> select distinct20 from stu_test; +----+ | 20 | +----+ | 20 | +----+ 1 row in set (0.00 sec) mysql> select xingming,(age+dept) from stu_test; +----------+------------+ | xingming | (age+dept) | +----------+------------+ | laowang | 28 | | huasheng | 23 | | dadou | 20 | | dadou | 20 | +----------+------------+ 4 rows in set, 3 warnings (0.01 sec) mysql> selectxingming,(age+dept)+10 from stu_test; #在上面的基礎上加10 +----------+---------------+ | xingming | (age+dept)+10 | +----------+---------------+ | laowang | 38 | | huasheng | 33 | | dadou | 30 | | dadou | 30 | +----------+---------------+ 4 rows in set, 3 warnings (0.00 sec) 小結: select * from student where name='王五'; select name,english from student; select distinct english from student; select name,(chinese+english+math) fromstudent; select name,(chinese+english+math)+10 fromstudent; select name as 姓名,(chinese+english+math)+10 as 總分 from student; //別名 select name 姓名,(chinese+english+math)+10 總分 from student; select * from student whereenglish>'90'; select name from student where(chinese+english+math)>200; select name from student where(chinese+english+math)> '200' //這裏用單引號也是能夠的 select name from student whereenglish>80 and english<90; select name from student where Englishbetween 80 and 90; //這句跟上面那句是同樣的 select * from student where mathin(89,90,91);
使用like 加上百分號來匹配
select * from student where name like '李_'; (2個字符) select * from student where name like '李%'; (2個字符以上)
order by 排序查詢
select name,math from student order by math; #默認是升序排序 select name 姓名,(chinese+english+math) 總分 from student order by (chinese+english+math) desc; #desc參數是降序 select name 姓名,(chinese+english+math) 總分 from student order by 總分 desc; select * from student where name like '李%' order by (chinese+english+math) desc;
咱們有時候要看一個表裏面有多少條數據,須要統計
select count(name) from student; ##查看name字段有多少條記錄 select count(*) from student; select count(*) from student where(chinese+english+math)>250;
求和
select sum(chinese),sum(english),sum(math) fromstudent; select sum(chinese+english+math) from student;
select avg(chinese) from student; select avg(chinese+math+english) from student;