今天整理了一了一下数据表的基本操做,但愿能帮助有须要的人!!!!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;