每种语言都具有自已的语言特点:即普通话与方言,如果数据库,你仅仅了解官话是不行的了。必须了解相应的方言,才能将数据库的功能发挥到最大。
sql所基于的理论的几个概念:
sql叫做结构化查询语言,数据库语言的一个关系数据库服务器
mysql是根据开发者来在一个mysql数据库中存储,查询以及随后更新数据语言的命名
数据库:
数据库服务器
数据库语言
sql基于关系模型的理论,要使用Sql,关于一个这个模型的一些知识是非常有用的
sql里面会广泛地使用如下语句:
表 table
列 column
行 row
空值 null value
约束 consistraint 完整性约束 integrity constraint
主健 primary key
侯选键 candiate key
替代键 alternate key
外键 foregin key
参照性外键 referntial key
GRANT ALL PRIVILEGES
ON *.*
TO 'BOOKSQL'@'localhost'
WITH GRANT OPTION
--查找用户用户的权限
select * from mysql.user where user='BOOKSQL';
表,列,行
数据只可以用
创建一个新的用户
--创建新的sql用户
--
CREATE USER 'BOOKSQL'@'localhost' IDENTIFIED BY 'BOOKSQLPW';
select * from mysql.user;
给予这个用户足够的权限
—创建数据库
drop DATABASE if exists TENNIS;
CREATE DATABASE TENNIS;
show databases;
use TENNIS;
select * from mysql.user;
—创建表
CREATE TABLE if not exists PLAYERS
(PLAYERNO INTEGER NOT NULL,
NAME CHAR(15) NOT NULL,
INITIALS CHAR(3) NOT NULL,
BIRTH_DATE DATE ,
SEX CHAR(1) NOT NULL,
JOINED SMALLINT NOT NULL,
STREET VARCHAR(30) NOT NULL,
HOUSENO CHAR(4) ,
POSTCODE CHAR(6) ,
TOWN VARCHAR(30) NOT NULL,
PHONENO CHAR(13) ,
LEAGUENO CHAR(4) ,
PRIMARY KEY (PLAYERNO) )
;
CREATE TABLE if not exists TEAMS
(TEAMNO INTEGER NOT NULL,
PLAYERNO INTEGER NOT NULL,
DIVISION CHAR(6) NOT NULL,
PRIMARY KEY (TEAMNO) )
;
CREATE TABLE if not exists MATCHES
(MATCHNO INTEGER NOT NULL,
TEAMNO INTEGER NOT NULL,
PLAYERNO INTEGER NOT NULL,
WON SMALLINT NOT NULL,
LOST SMALLINT NOT NULL,
PRIMARY KEY (MATCHNO) )
;
CREATE TABLE if not exists PENALTIES
(PAYMENTNO INTEGER NOT NULL,
PLAYERNO INTEGER NOT NULL,
PAYMENT_DATE DATE NOT NULL,
AMOUNT DECIMAL(7,2) NOT NULL,
PRIMARY KEY (PAYMENTNO) )
;
CREATE TABLE if not exists COMMITTEE_MEMBERS
(PLAYERNO INTEGER NOT NULL,
BEGIN_DATE DATE NOT NULL,
END_DATE DATE ,
POSITION CHAR(20) ,
PRIMARY KEY (PLAYERNO, BEGIN_DATE))
通过create table语句,还定义了几个属性,包括表的名字,表的列以及主健
其中指定了表名,表中字段的数据类型
并定义了一个主键
强烈建议在每一个数据库定义一个主键
向表中创建初始化的语句
每个字符值,必须用一个单引号括起来
INSERT INTO PLAYERS VALUES (
2, 'Everett', 'R', '1948-09-01', 'M', 1975, 'Stoney Road',
'43', '3575NH', 'Stratford', '070-237893', '2411')
;
INSERT INTO PLAYERS VALUES (
6, 'Parmenter', 'R', '1964-06-25', 'M', 1977, 'Haseltine Lane',
'80', '1234KK', 'Stratford', '070-476537', '8467')
;
INSERT INTO PLAYERS VALUES (
7, 'Wise', 'GWS', '1963-05-11', 'M', 1981, 'Edgecombe Way',
'39', '9758VB', 'Stratford', '070-347689', NULL)
;
INSERT INTO PLAYERS VALUES (
8, 'Newcastle', 'B', '1962-07-08', 'F', 1980, 'Station Road',
'4', '6584WO', 'Inglewood', '070-458458', '2983')
;
INSERT INTO PLAYERS VALUES (
27, 'Collins', 'DD', '1964-12-28', 'F', 1983, 'Long Drive',
'804', '8457DK', 'Eltham', '079-234857', '2513')
;
INSERT INTO PLAYERS VALUES (
28, 'Collins', 'C', '1963-06-22', 'F', 1983, 'Old Main Road',
'10', '1294QK', 'Midhurst', '010-659599', NULL)
;
INSERT INTO PLAYERS VALUES (
39, 'Bishop', 'D', '1956-10-29', 'M', 1980, 'Eaton Square',
'78', '9629CD', 'Stratford', '070-393435', NULL)
;
INSERT INTO PLAYERS VALUES (
44, 'Baker', 'E', '1963-01-09', 'M', 1980, 'Lewis Street',
'23', '4444LJ', 'Inglewood', '070-368753', '1124')
;
INSERT INTO PLAYERS VALUES (
57, 'Brown', 'M', '1971-08-17', 'M', 1985, 'Edgecombe Way',
'16', '4377CB', 'Stratford', '070-473458', '6409')
;
INSERT INTO PLAYERS VALUES (
83, 'Hope', 'PK', '1956-11-11', 'M', 1982, 'Magdalene Road',
'16A', '1812UP', 'Stratford', '070-353548', '1608')
;
INSERT INTO PLAYERS VALUES (
95, 'Miller', 'P', '1963-05-14', 'M', 1972, 'High Street',
'33A', '5746OP', 'Douglas', '070-867564', NULL)
;
INSERT INTO PLAYERS VALUES (
100, 'Parmenter', 'P', '1963-02-28', 'M', 1979, 'Haseltine Lane',
'80', '6494SG', 'Stratford', '070-494593', '6524')
;
INSERT INTO PLAYERS VALUES (
104, 'Moorman', 'D', '1970-05-10', 'F', 1984, 'Stout Street',
'65', '9437AO', 'Eltham', '079-987571', '7060')
;
INSERT INTO PLAYERS VALUES (
112, 'Bailey', 'IP', '1963-10-01', 'F', 1984, 'Vixen Road',
'8', '6392LK', 'Plymouth', '010-548745', '1319')
;
INSERT INTO TEAMS VALUES (1, 6, 'first')
;
INSERT INTO TEAMS VALUES (2, 27, 'second')
;
INSERT INTO MATCHES VALUES ( 1, 1, 6, 3, 1)
;
INSERT INTO MATCHES VALUES ( 2, 1, 6, 2, 3)
;
INSERT INTO MATCHES VALUES ( 3, 1, 6, 3, 0)
;
INSERT INTO MATCHES VALUES ( 4, 1, 44, 3, 2)
;
INSERT INTO MATCHES VALUES ( 5, 1, 83, 0, 3)
;
INSERT INTO MATCHES VALUES ( 6, 1, 2, 1, 3)
;
INSERT INTO MATCHES VALUES ( 7, 1, 57, 3, 0)
;
INSERT INTO MATCHES VALUES ( 8, 1, 8, 0, 3)
;
INSERT INTO MATCHES VALUES ( 9, 2, 27, 3, 2)
;
INSERT INTO MATCHES VALUES (10, 2, 104, 3, 2)
;
INSERT INTO MATCHES VALUES (11, 2, 112, 2, 3)
;
INSERT INTO MATCHES VALUES (12, 2, 112, 1, 3)
;
INSERT INTO MATCHES VALUES (13, 2, 8, 0, 3)
;
INSERT INTO PENALTIES VALUES (1, 6, '1980-12-08',100)
;
INSERT INTO PENALTIES VALUES (2, 44, '1981-05-05', 75)
;
INSERT INTO PENALTIES VALUES (3, 27, '1983-09-10',100)
;
INSERT INTO PENALTIES VALUES (4,104, '1984-12-08', 50)
;
INSERT INTO PENALTIES VALUES (5, 44, '1980-12-08', 25)
;
INSERT INTO PENALTIES VALUES (6, 8, '1980-12-08', 25)
;
INSERT INTO PENALTIES VALUES (7, 44, '1982-12-30', 30)
;
INSERT INTO PENALTIES VALUES (8, 27, '1984-11-12', 75)
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 6, '1990-01-01', '1990-12-31', 'Secretary')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 6, '1991-01-01', '1992-12-31', 'Member')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 6, '1992-01-01', '1993-12-31', 'Treasurer')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 6, '1993-01-01', NULL, 'Chairman')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 2, '1990-01-01', '1992-12-31', 'Chairman')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 2, '1994-01-01', NULL, 'Member')
;
INSERT INTO COMMITTEE_MEMBERS VALUES (112, '1992-01-01', '1992-12-31', 'Member')
;
INSERT INTO COMMITTEE_MEMBERS VALUES (112, '1994-01-01', NULL, 'Secretary')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 8, '1990-01-01', '1990-12-31', 'Treasurer')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 8, '1991-01-01', '1991-12-31', 'Secretary')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 8, '1993-01-01', '1993-12-31', 'Member')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 8, '1994-01-01', NULL, 'Member')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 57, '1992-01-01', '1992-12-31', 'Secretary')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 27, '1990-01-01', '1990-12-31', 'Member')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 27, '1991-01-01', '1991-12-31', 'Treasurer')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 27, '1993-01-01', '1993-12-31', 'Treasurer')
;
INSERT INTO COMMITTEE_MEMBERS VALUES ( 95, '1994-01-01', NULL, 'Treasurer')
对于插入的数据格式
—向表中插入数据
—查询语句
SELECT PLAYERNO, NAME, BIRTH_DATE ,TOWN
FROM PLAYERS
WHERE TOWN = 'Stratford'
ORDER BY NAME;
order by 是以某个用户的名字升序排列
mysql的数值计算
select 33*110;
在某个表上,创建一个索引
CREATE INDEX PENALTIES_AMOUNT ON
PENALTIES (AMOUNT)
索引定义来优化select 语句的过程
一个索引不会一个select 语句中显式地引用sql的语法不允许这样做
在一条语句的处理中,数据库服务器自已决定是否使用一个已有的索引
索引可以随时创建或删除
当更新,插入,删除行的进候,mysql也维护了更新表的索引
这意味着,一方面,select 语句处理时间减少,另一方面更新语 insert update delete的处理进间却增加了。
索引也是一种数据库对象
一种殊殊的索引是唯一索引,sql也使用唯一索引来优化语句的处理
唯一索引还有另一个功能,它们确保一个特定的列或列的组合没且重复值,通过create 和index之间加上一个关键字unique可以创
建唯一索引。
视图:
在一个表中,实际存储的带有数据的行。这意味着,一个表占据特定数量的存储空间
行越多,所需的存储空间越,视图是用户可见的表,但这们并没有占据任何存储空间
因此,视图可以作为实际的或被逃生的表的一个引用,视图的会为就好像它包含了实际的
数据行一样
CREATE VIEW NUMBER_SETS (MATCHNO, DIFFERENCE) AS
SELECT MATCHNO, ABS(WON - LOST)
FROM MATCHES
;
视图的内容并没有存储数据中,而是生成于执行一个select 语句(或另一条语句)的时候,因此,使用视图,在存储空间上并不会有任
额外的开销,因为视图的内容只能包含已经存储在其他表中的数据。
视图的作用
简化常规的或重复的语句的执行
重新构架表被看到的方式
分几个步骤执行的select 语句
提高了数据的安全性。
用户和数据安全性
用户和数据安全性:
数据库中的数据应该受保护不会受到不正确的使用和误用,不是每个人都应该访问数据库中的所有的数据
删除数据库对象
删除matches表
删除number_sets视图
删除索引
删除数据库
DROP TABLE MATCHES
DROP VIEW NUMBER_SETS
DROP INDEX PENALTIES_AMOUNT
DROP DATABASE TENNIS
查询数据库版本
select @@VERSOIO
修改sql_mode参数的值改为pipes_as_concat
这个改变只适用于当前的sql用户
换句话说,不同的用户对于某个系统变量会看到不同的值
SET @@SQL_MODE = 'PIPES_AS_CONCAT'
SET @@SQL_MODE = CONCAT(@@SQL_MODE,
CASE @@SQL_MODE WHEN '' THEN '' ELSE ',' END,
'NO_ZERO_IN_DATE')
由于sql_mode系统变量的值影响到几个Sql语句的功能和处理方式,我们会更加详细地讨论它
sql_mode的值包含一组由逗号的0,1或更多设置,例如具有
对sql的语句的分组:
sql有很多语句,但是
数据定义语言:DDL :包含影响到数据对象的结构的所有sql语句
数据操作语言:DML
数据控制语言:DCL
过程式语句:procedural statment