本文目录一览:
15个MySQL常用基本SQL语句
在学习SQL语句之前,首先需要区分几个概念,我们常说的数据库是指数据库软件,例如MySQL、Oracle、SQL Server等,而本文提到的数据库是指数据库软件中的一个个用于存储数据的容器。
在MySQL中,数据库称为database,数据表称为table,一个数据库软件中有多个数据库(databases),每个数据库中又可以有多个数据表(tables),最终,数据是存储在数据表中。
数据库和数据表之间的关系可以用下面这个图来表示,对于一个数据库来说,有多个数据表。
在正式开始写SQL语句之前,需要说明两点。
这里通过MySQL Workbench来写SQL代码,在Workbench中,执行一条SQL语句的方式有两种。
了解了这之后,接下来介绍一些常见的命令,分两部分:数据库常用命令和数据表常用命令。
1、查看有哪些数据库
2、创建数据库
创建一个名为Testdb的数据库。
3、创建数据库并指定编码格式
有些时候,为了防止中文乱码,创建数据库的时候需要指定编码格式。
4、使用某个数据库
使用mydb这个数据库,或者进入mydb这个数据库。
5、删除数据库
删除Testdb这个数据库。
1、查看有哪些数据表
进入某个数据库之后,想查看有哪些数据表,SQL语句为:
mydb是一个新建的数据库,所以自然是没有数据表。
2、创建数据表
建表SQL语句格式为:
说明: 每个字段以逗号分隔,最后一个字段不加逗号。
例如,给定一个学员信息表,如下表所示。
根据以上表格,建表SQL语句如下。
以上语句中,primary key表示主键,意思是这个字段作为记录的唯一标识,就像每个人的身份证号,都是唯一确定的。
3、查看表结构
查看表结构的SQL命令为:
执行该命令会显示表stuinfo的基本结构,例如有哪些字段,每个字段是什么类型,谁是主键等。
4、修改数据表
修改数据表通过drop子句进行,比如,建完表后,想增加一个字段,SQL语句的格式为:
想在指定位置增加一个字段,例如,在某个字段后增加一个字段,SQL语句的格式为:
如果在某个字段之前增加字段,用before即可。
例如,在字段age后增加一个字段major(专业),SQL语句为:
执行这个命令,再通过describe查看表结构,会发现表中多了一个字段major。
如果要删除major这个字段,通过drop子句,SQL语句为:
5、重命名表
重命名表通过alter+rename来实现,SQL语句格式为:
这里为了不影响之前创建的表,我们创建一个新表,SQL语句如下。
以上创建一个名为stuInfoTest的表,现在想将它的名称改成stuinfotest1,SQL语句为:
6、删除数据表
删除数据表通过drop进行,SQL语句格式为:
例如,删除数据表stuinfotest1,SQL语句为:
7、插入记录
此时的表stuinfo是空的,没有数据,我们要向表中插入记录。
插入记录通过insert into进行,SQL语句格式为:
例如,向表stuinfo插入一条记录,SQL语句为:
注意:上方是一条SQL语句,为了可读性换行,记住一条SQL语句默认以分号结尾。
如果需要一次性插入多条记录,SQL语句格式为:
例如,向表stuinfo再插入两条记录,SQL语句为:
注意:如果设置了主键,插入记录的主键字段是不能重复的,也就是不能插入重复的记录。
作业:大家可以按照上述方法将上面的学员信息表中的所有记录都插入表stuinfo中。
8、查询记录
有了数据之后,就可以查询记录了,查询记录通过select子句进行。
例如,想查询表stuinfo中的所有记录,SQL语句为:
执行之后,就可以看到表stuinfo中的所有记录了。
如果想查询符合某个条件的记录,就要用到where子句了,SQL格式为:
例如,想查询stuid为20161001的记录,SQL语句为:
9、删除记录
删除记录通过delete子句进行,SQL语句格式为:
例如,想删除stuid为20161002的记录,SQL语句为:
10、修改记录
修改记录通过update子句进行,update就是更新的意思,SQL语句格式为:
例如,想将学号(stuid)为20161001的记录的姓名(stuname)更新为Jack,SQL语句为:
以上,就是MySQL中的基本SQL语句。
零基础如何学习数据分析?查看下方专栏。
备份MYSQL数据库SQL语句怎么写
mysqldump备份还原和mysqldump导入导出语句大全详解
mysqldump备份:
mysqldump -u用户名 -p密码 -h主机数据库 a -w "sql条件" --lock-all-tables 路径
案例:
mysqldump -uroot -p1234 -hlocalhost db1 a -w "id in (select id from b)" --lock-all-tables c:\aa.txt
mysqldump还原:
mysqldump -u用户名 -p密码 -h主机数据库路径
案例:
mysql -uroot -p1234 db1 c:\aa.txt
mysqldump按条件导出:
mysqldump -u用户名 -p密码 -h主机数据库 a --where "条件语句" --no-建表路径
mysqldump -uroot -p1234 dbname a --where "tag='88'" --no-create-info c:\a.sql
mysqldump按导入:
mysqldump -u用户名 -p密码 -h主机数据库路径
案例:
mysql -uroot -p1234 db1 c:\a.txt
mysqldump导出表:
mysqldump -u用户名 -p密码 -h主机数据库表
案例:
mysqldump -uroot -p sqlhk9 a --no-data
讲一下 mysqldump 的一些主要参数
--compatible=name
它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。
--complete-insert,-c
导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。
--default-character-set=charset
指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。
--disable-keys
告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。
--extended-insert = true|false
默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。
--hex-blob
使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。
--lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。
--lock-tables
它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。
--no-create-info,-t
只导出数据,而不添加 CREATE TABLE 语句。
--no-data,-d
不导出任何数据,只导出数据库表结构。
--opt
这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。
--quick,-q
该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。
--routines,-R
导出存储过程以及自定义函数。
--single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 --quick 选项。
--triggers
同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。
其他参数详情请参考手册,我通常使用以下 SQL 来备份 MyISAM 表:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr "
--default-character-set=utf8 --opt --extended-insert=false "
--triggers -R --hex-blob -x db_name db_name.sql
使用以下 SQL 来备份 Innodb 表:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr "
--default-character-set=utf8 --opt --extended-insert=false "
--triggers -R --hex-blob --single-transaction db_name db_name.sql
另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr "
--default-character-set=utf8 --opt --master-data=1 "
--single-transaction --flush-logs db_name db_name.sql
它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。
1.2 还原
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。
直接用 mysql 客户端
例如:
/usr/local/mysql/bin/mysql -uyejr -pyejr db_name db_name.sql
用 SOURCE 语法(实验不成功!!!)
其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:
SOURCE /tmp/db_name.sql;
这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。
mysql数据库执行sql语句怎么写
Mysql常用命令详解
Mysql安装目录
数据库目录
/var/lib/mysql/
配置文件
/usr/share/mysql(mysql.server命令及配置文件)
相关命令
/usr/bin(mysqladmin mysqldump等命令)
启动脚本
/etc/init.d/mysql(启动脚本文件mysql的目录)
系统管理
连接MySQL
格式:
mysql -h 主机地址 -u用户名 -p用户密码
例 1:连接到本机上的 MySQL。
hadoop@ubuntu:~$ mysql
-uroot -pmysql;
例 2:连接到远程主机上的 MYSQL。
hadoop@ubuntu:~$ mysql -h
127.0.0.1 -uroot -pmysql;
修改新密码
在终端输入:mysql -u用户名 -p密码,回车进入Mysql。
use mysql;
update user set password=PASSWORD('新密码') where
user='用户名';
flush privileges; #更新权限
quit; #退出
增加新用户
格式:grant select on 数据库.* to
用户名@登录主机 identified by '密码'
举例:
例 1:增加一个用户 test1 密码为
abc,让他可以在任何主机上登录,并对所有数据库有
查询、插入、修改、删除的权限。首先用以 root 用户连入
MySQL,然后键入以下命令:
mysqlgrant select,insert,update,delete on *.* to
root@localhost identified by 'mysql';
或者
grant all privileges on *.* to
root@localhost identified by 'mysql';
然后刷新权限设置。
flush privileges;
例
2:如果你不想 root 有密码操作数据库“mydb”里的数据表,可以再打一个命令将密码消掉。
grant
select,insert,update,delete on mydb.* to root@localhost identified by
'';
删除用户
hadoop@ubuntu:~$ mysql
-u用户名 -p密码
mysqldelete from user where user='用户名' and
host='localhost';
mysqlflush privileges;
//删除用户的数据库
mysqldrop
database dbname;
数据库操作
显示所有的数据库
mysql show databases;(注意:最后有个
s)
创建数据库
mysql create database
test;
连接数据库
mysql use
test;
查看当前使用的数据库
mysql select
database();
当前数据库包含的表信息
mysql
show tables; (注意:最后有个 s)
删除数据库
mysql drop database
test;
表操作
备注:操作之前使用“use
数据库名”应连接某个数据库。
建表
命令:create
table 表名 (字段名 1 类型 1 [,..字段名 n 类型
n]);
例子:
mysql create table MyClass(
id int(4) not null
primary key auto_increment,
name char(20) not null,
sex int(4)
not null default '0',
degree double(16,2));
获取表结构
命令: desc 表名,或者show columns from
表名
例子:
mysql describe MyClass
mysql desc MyClass;
mysql
show columns from MyClass;
删除表
命令:drop table 表名
例如:删除表名为
MyClass 的表
mysql drop table MyClass;
插入数据
命令:insert into 表名 [( 字段名
1[,..字段名 n ])] values ( 值 1 )[, ( 值 n )]
例子:
mysql insert
into MyClass values(1,'Tom',96.45),(2,'Joan',82.99), (2,'Wang',
96.59);
查询表中的数据
查询所有行
mysql
select * from MyClass;
查询前几行数据
例如:查看表 MyClass 中前 2 行数据
mysql
select * from MyClass order by id limit 0,2;
或者
mysql select * from
MyClass limit 0,2;
删除表中数据
命令:delete from 表名 where 表达式
例如:删除表
MyClass 中编号为 1 的记录
mysql delete from MyClass where id=1;
修改表中数据
命令:update 表名 set 字段=新值,... where
条件
mysql update MyClass set name='Mary' where id=1;
在表中增加字段
命令:alter table 表名 add 字段 类型
其他;
例如:在表 MyClass 中添加了一个字段 passtest,类型为 int(4),默认值为 0
mysql alter
table MyClass add passtest int(4) default '0'
更改表名
命令:rename table 原表名 to 新表名;
例如:在表
MyClass 名字更改为 YouClass
mysql rename table MyClass to
YouClass;
更新字段内容
命令:update 表名 set
字段名 = 新内容
update 表名 set 字段名 = replace(字段名, '旧内容', '新内容');
例如:文章前面加入 4
个空格
update article set content=concat(' ', content);
数据库导入导出
从数据库导出数据库文件
使用“mysqldump”命令
首先进入 DOS
界面,然后进行下面操作。
1)导出所有数据库
格式:mysqldump -u [数据库用户名] -p
-A[备份文件的保存路径]
2)导出数据和数据结构
格式:mysqldump -u [数据库用户名] -p
[要备份的数据库名称][备份文件的保存路径]
举例:
例 1:将数据库 mydb 导出到 e:\MySQL\mydb.sql
文件中。
打开开始-运行-输入“cmd”,进入命令行模式。
c:\ mysqldump -h localhost -u
root -p mydb e:\MySQL\mydb.sql
然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。
例
2:将数据库 mydb 中的 mytable 导出到 e:\MySQL\mytable.sql 文件中。
c:\ mysqldump -h
localhost -u root -p mydb mytablee:\MySQL\mytable.sql
例 3:将数据库 mydb
的结构导出到 e:\MySQL\mydb_stru.sql 文件中。
c:\ mysqldump -h localhost -u root -p
mydb --add-drop-table e:\MySQL\mydb_stru.sql
备注:-h localhost
可以省略,其一般在虚拟主机上用。
3)只导出数据不导出数据结构
格式:
mysqldump -u [数据库用户名] -p -t
[要备份的数据库名称][备份文件的保存路径]
4)导出数据库中的Events
格式:mysqldump -u [数据库用户名] -p
-E [数据库用户名][备份文件的保存路径]
5)导出数据库中的存储过程和函数
格式:mysqldump -u [数据库用户名]
-p -R [数据库用户名][备份文件的保存路径]
从外部文件导入数据库中
1)使用“source”命令
首先进入“mysql”命令控制台,然后创建数据库,然后使用该数据库。最后执行下面操作。
mysqlsource
[备份文件的保存路径]
2)使用“”符号
首先进入“mysql”命令控制台,然后创建数据库,然后退出 MySQL,进入 DOS
界面。最后执行下面操作。
mysql -u root –p [备份文件的保存路径]
求MySQL数据库语句 计算某一列的和
MySQL数据库语句,计算某一列的和用select sum(b) from a就可以了。
下面来补充一些MySql的基本操作命令。
注: 表示参数、[]表示可选项
连接数据库:mysql mysql -uusername -ppassword;
显示所有数据库:mysql show databases;
选择数据库:mysql use database name;
创建一个数据库:mysql create database database name [charset charset];
删除一个数据库:mysql drop database database name;
修改数据库名:mysql无法直接修改数据库名!
显示所有表:mysql show tables;
删除一张表:mysql drop table table name;
修改表名:mysql rename table table name to new table name;
清空表:mysql truncate table name;
truncate和delete的区别:truncate相当于删表再重建一张相同结构的表,操作后得到一张全新表;delete只是删除数据,而且是按照行来删除,如果表中有自增型字段,其影响还在。
查看表结构:mysql desc table name;
快速建一张相似的表:mysql create table table name like another table;