首页 > 代码库 > SQL入门
SQL入门
数据库简介
所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如图所示:
数据在数据库中的存储方式:
SQL语法
创建数据库语句:CREATE DATABASE [IF NOT EXISTS] database_name [create_specification [, create_specification] ...];
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
CHARACTER SET:指定数据库采用的字符集
COLLATE:指定数据库字符集的校对规则
显示数据库语句: SHOW DATABASES;
显示数据库创建语句:SHOW CREATE DATABASE db_name;
数据库删除语句:DROP DATABASE [IF EXISTS] db_name ;
修改数据库字符集及校对规则语句:ALTER DATABASE [IF NOT EXISTS] db_name [alter_specification [, alter_specification] ...]
alter_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
备份数据语句(准备好数据库及表格后在Windows命令窗口下执行):mysqldump -u 用户名 -p 数据库名 > 文件名.sql
恢复数据库语句(备份完后数据库并删除数据库后): 方式1:(1)创建库:create database 数据库名; (2)选择创建的数据库use database; (3)Source 文件名.sql
方式2:mysql -uroot -p mydb1<c:\test.sql (window命令)
创建表语句(注意:创建表前,要先使用use db语句使用库):
CREATE TABLE table_name
( field1 datatype,
field2 datatype,
field3 datatype,
)character set 字符集 collate 校对规则
field:指定列名 datatype:指定列类型
创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型,MySQL常用数据类型如下:
修改表语句(ALTER TABLE ):
追加一列:ALTER TABLE table-name ADD (column datatype [DEFAULT expr] [, column datatype]...);
修改一列:ALTER TABLE table-name MODIFY (column datatype [DEFAULT expr][, column datatype]...);
删除一列:ALTER TABLE table-name DROP (column);
修改表的名称:Rename table 表名 to 新表名
修改表的字符集:alter table student character set utf8;
数据库CRUD语句
Insert语句: INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
(1)插入的数据应与字段的数据类型相同。
(2)数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
(3)在values中列出的数据位置必须与被加入的列的排列位置相对应。
(4)字符和日期型数据应包含在单引号中。
(5)插入空值,不指定或insert into table value(null)
Update语句: update tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
(1)UPDATE语法可以用新值更新原有表行中的各列。
(2)SET子句指示要修改哪些列和要给予哪些值。
(3)WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
Delete语句: delete from tbl_name [WHERE where_definition]
(1)如果不使用where子句,将删除表中所有数据。
(2)Delete语句不能删除某一列的值(可使用update)
(3)使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
(4)同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
(5)删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。
Select语句:SELECT [DISTINCT] *|{column1, column2. column3..} FROM table;
(1)Select 指定查询哪些列的数据。
(2)column指定列名。
(3)*号代表查询所有列。
(4)From指定查询哪张表。
(5)DISTINCT可选,指显示结果时,是否剔除重复数据
(6)在select语句中可使用表达式对查询的列进行运算:SELECT *|{column1|expression, column2|expression,..} FROM table;
(7)在select语句中可使用as语句:SELECT column as 别名 from 表名;
使用where子句,进行过滤查询,在where子句中经常使用的运算符:
使用order by 子句排序查询结果:SELECT column1, column2. column3..FROM table order by column asc|desc
(1)Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
(2)Asc 升序、Desc 降序
(3)ORDER BY 子句应位于SELECT语句的结尾。
Count(列名)返回某一列,行的总数:Select count(*)|count(列名) from tablename [WHERE where_definition]
Sum函数返回满足where条件的行的和: Select sum(列名){,sum(列名)…} from tablename [WHERE where_definition]
AVG函数返回满足where条件的一列的平均值: Select avg(列名){,avg(列名)…} from tablename [WHERE where_definition]
Max/min函数返回满足where条件的一列的最大/最小值: Select max(列名) from tablename [WHERE where_definition]
使用group by 子句对列进行分组: SELECT column1, column2. column3.. FROM table group by column
表的约束
定义主键约束 : primary key (不允许为空,不允许重复)
删除主键:alter table tablename drop primary key ;
定义主键自动增长: auto_increment
定义唯一约束:unique
定义非空约束:not null
定义外键约束:constraint ordersid_FK foreign key(ordersid) references orders(id),
MySQL字符集
mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。
client是客户端使用的字符集。
connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
server是服务器安装时指定的默认字符集设定。
system是数据库系统使用的字符集设定。
SQL入门