Mysql,我为了面试准备的


每种语言都具有自已的语言特点:即普通话与方言,如果数据库,你仅仅了解官话是不行的了。必须了解相应的方言,才能将数据库的功能发挥到最大。

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