代码(2)

索引

索引的创建

1.使用CREATE INDEX语句创建索引

CREATE INDEX index_customers

ON mysql_test.customers(cust_name(3) ASC);

 

CREATE INDEX index_cust

ON mysql_test.customers(cust_name,cust_id)

USING BTREE;

如不指定,默认BTREE

2.使用CREATE TABLE语句创建索引

CREATE TABLE seller(

seller_id int NOT NULL AUTO_INCREAMENT,

seller_name char(50) NOT NULL,

seller_address char(50) NULL,

seller_contact char(50) NULL,

product_type int(5) NULL,

sales int NULL,

PRIMARY KEY(seller_id,product_type),

INDEX index_seller(sales)

);

3.使用ALTER TABLE语句创建索引

ALTER TABLE mysql_test.seller

ADD INDEX index_seller_name(seller_name);

索引的删除

1.使用DROP INDEX语句删除索引

DROP INDEX index_cust ON mysql_test.customers;

2.使用ALTER TABLE删除索引

ALTER TABLE mysql_test.customers

DROP PRIMARY KEY,

DROP INDEX index_customers;

 

 

视图

创建视图

CREATE OR REPLACE VIEW mysql_test.customers.view

AS

SELECT * FROM mysql_test.customers

WHERE cust_sex='M'

WITH CHECK OPTION;

注意WITH CHECK OPTION用于指定在可更新视图上所进行的修改都要符合SELECT

中所指定的限制条件。

删除视图与数据库、表差不多

修改视图

查看视图定义

更新视图数据

查询视图数据

 

 

 

 

数据完整性约束与表维护语句

CREATE TABLE customers(

cust_id int NOT NULL AUTO_INCREMENT PRIMARY KEY,

cust_name char(50) NOT NULL,

cust_sex int(1) NOT NULL DEFAULT 0,

cust_address char(50) NULL,

cust_contact char(50) NULL

)ENGINE=InnoDB;

 

 

CREATE TABLE orders(

order_id INT NOT NULL AUTO_INCREMENT,

order_product CHAR(50) NOT NULL,

order_product_type CHAR(50) NOT NULL,

cust_id INT NOT NULL,

order_date DATETIME NOT NULL,

order_price DOUBLE NOT NULL,

order_amount INT NOT NULL,

PRIMARY KEY(order_id),

FOREIGN KEY(cust_id)

REFERENCES customers(cust_id)

ON DELETE RESTRICT

ON UPDATE RESTRICT

);

 

 

CREATE TABLE orders(

order_id INT NOT NULL AUTO_INCREMENT,

order_product CHAR(50) NOT NULL,

order_product_type CHAR(50) NOT NULL,

cust_id INT NOT NULL

CHECK(cust_id IN(SELECT cust_id FROM customers)),

order_date DATETIME NOT NULL,

order_price DOUBLE NOT NULL,

order_amount INT NOT NULL,

PRIMARY KEY(order_id)

);

 

 

CREATE TABLE orders(

order_id INT NOT NULL AUTO_INCREMENT,

order_product CHAR(50) NOT NULL,

order_product_type CHAR(50) NOT NULL,

cust_id INT NOT NULL,

order_date DATETIME NOT NULL,

order_price DOUBLE NOT NULL,

order_amount INT NOT NULL,

PRIMARY KEY(order_id),

CHECK(order_price>=2000 AND order_amount<=5)

);

 

 

 

 

CREATE TABLE orders(

order_id INT NOT NULL AUTO_INCREMENT,

order_product CHAR(50) NOT NULL,

order_product_type CHAR(50) NOT NULL,

cust_id INT NOT NULL,

order_date DATETIME NOT NULL,

order_price DOUBLE NOT NULL,

order_amount INT NOT NULL,

CONSTRAINT PRIMARY_KEY_ORDERS PRIMARY KEY(order_id),

CONSTRAINT FOREIGH_KEY_ORDERS FOREIGH KEY(cust_id)

REFERENCES customers(cust_id)

ON DELETE RESTRICT

ON UPDATE RESTRICT

);

 

 

ANALYZE TABLE mysql_test.customers;

更新数据库表的索引散列程度

 

 

CHECK TABLE mysql_test.customers;

检测表是否出现错误,该语句只对InnoDB、MyISAM、ARCHIVE、CSV表起作用

 

 

CHECKSUM TABLE mysql_test.customers;

获取一个校验和

 

 

OPTIMIZE TABLE mysql_test.customers;

优化数据库表

 

 

REPAIR TABLE

 

 

 

触发器

创建触发器

CREATE TRIGGER mysql_test.customers_insert.trigger AFTER INSERT

ON mysql_test.customers FOR EACH ROW SET @str='one customer added!';

 

SELECT @str;

 

 

DROP TRIGGER IF EXISTS mysql_test.customers_insert.trigger;

 

CREATE TRIGGER mysql_test.customers_insert.trigger AFTER INSERT

ON mysql_test.customers FOR EACH ROW SET @str=NEW.cust_id;

 

 

INSERT INTO mysql_test.customers

VALUES(NULL,'曾伟','F','长沙市','芙蓉区');

SELECT @str;

 

CREATE TRIGGER mysql_test.customers_update.trigger BEFORE UPDATE

ON mysql_test.customers FOR EACH ROW

SET NEW.cust_address=OLD.cust_contact;

 

UPDATE mysql_test.customers SET cust_address='武汉市'

WHERE cust_name='曾伟';

 

 

事件

SHOW VARIABLES LIKE 'EVENT_SCHEDULER';

 

 

SELECT @@ EVENT_SCHEDULER;

 

SELECT GLOBAL EVENT_SCHEDULER=1;

 

 

SELECT GLOBAL EVENT_SCHEDULER=TRUE;

 

创建事件

USE mysql_test;

DELIMITER $$

CREATE EVENT IF NOT EXISTS event_insert

ON SCHEDULER EVERY 1 MONTH

STARTS CURDATE+INTERVAL 1 MONTH

ENDS '2013-12-31'

DO

BEGIN

IF YEAR(CURDATE())<2013 THEN

INSERT INTO customers

VALUES(NULL,'戴军','M','北京市','海淀区');

       END IF;

END $$

 

修改事件

ALTER EVENT event_insert DISABLE;

 

ALTER EVENT event_insert ENABLE;

 

ALTER EVENT event_insert 

RENAME TO e_insert

 

DROP EVENT IF EXISTS e_insert;

 

存储过程与存储函数

DELIMITER !!

DELIMITER ;

 

DELIMITER $$

CREATE PROCEDURE sp_update_sex(IN cid INT,IN csex CHAR(1))

BEGIN

UPDATE customers SET cust_sex=csex WHERE cust_id=cid;

END $$

 

DECLARE cid INT(10);

 

SET cid=910;

 

DELIMITER $$

CREATE PROCEDURE sp_sumofrow(OUT ROWS INT)

BEGIN

DECLARE cid INT;

DECLARE FOUND BOOLEAN DEFAULT TRUE;

DECLARE cur_cid CURSOR FOR 

SELECT cust_id FROM customers;

DECLARE CONTINUE HANDLER FOR NOT FOUND

SET FOUND=FALSE;

SET ROES=0;

OPEN cur_cid;

FETCH cur_cid INTO cid;

WHILE FOUND DO

SET ROWS=ROWS+1;

FETCH cur_cid INTO cid;

END WHILE

CLOSE cur_cid;

END $$

 

本例中定义了一个CONTINUE HANDLER句柄,它是在条件出现时执行的代码

用于控制循环语句,实现游标的下移

 

调用存储过程

CALL sp_update_sex(909,'M');

修改存储过程

删除存储过程

DROP PROCEDURE sp_update_sex;

 

 

存储函数

DELIMITER $$

CREATE FUNCTION fn_search(cid INT)

RETURNS CHAR(2)

DETERMINISTIC

BEGIN

DECLARE SEX CHAR(2)

SELECT cust_sex INTO SEX FROM customers

WHERE cust_id=cid;

IF SEX IS NULL THEN

RETURN(SELECT'没有客户');

ELSE IF SEX='F' THEN

RETURN(SELECT'女');

ELSE RETURN(SELECT'男');

END IF;

END IF;

END $$

 

 

SELECT fn_search(904);

 

DROP FUNCTION IF EXISTS fn_search;

访问控制与安全管理

1.用户账号管理

select user from mysql.user;

1.1创建用户账号

SELECT PASSWORD(456);

CREATE USER 'zhangsan'@'localhost'IDENTIFIED BY '123'

'lisi'@'localhost'IDENTIFIED BY PASSWPRD

'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

1.2删除用户

DROP USER lisi@ localhost

1.3修改用户账号

RENAME USER 'zhangsan'@'localhost'TO'wangwu'@'localhost';

1.4修改用户口令

SELECT PASSWORD('hello');

SET PASSWORD FOR 'wangwu'@'localhost'

='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

2.账户权限管理

SHOW GRANTS FOR 'zhangsan'@'locaalhost';

2.1权限的授予

GRANT SELECT(cust_id,cust_name)

ON mysql_test.customers

TO 'zhangsan'@'locaalhost';

GRANT SELECT,UPDATE

ON mysql_test.customers

TO 'liming'@'localhost' IDENTIFIED BY '123',

'huang'@'localhost' IDENTIFIED BY '789';

GRANT ALL

ON mysql_test.*

TO 'wangwu'@'localhost';

GRANT CREATE USER

ON *.*

TO 'wangwu'@'localhost';

2.2权限的转移与限制

GRANT SELECT,UPDATE

ON mysql_test.customers

TO 'zhou'@'localhost' IDENTIFIED BY '123'

WITH GRANT OPTION;

 

GRANT DELETE

ON mysql_test.customers

TO 'zhou'@'localhost'

WITH MAX_QUERIES_PER_HOUR 1;

 

2.3权限的撤销

REVOKE SELECT

ON mysql_test.customers

TO 'zhou'@'localhost';

 

 

 

备份与恢复

1.使用sql语句备份恢复表数据

SELECT * FROM mysql_test.customers

INTO OUTFILE 'C:/BACKUP/backupfile.txt'

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '?';

 

 

LOAD DATA INFILE 'C:/BACKUP/backupfile.txt'

INTO TABLE mysql_test.customers_copy

FIELDS TERMINATED BY ','

OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '?';

2.使用客户端恢复备份表数据

mysqldump -h localhost -u root -p123456 mysql_test customers>c:\backup\file.sql

注意:如果是本地服务器-h项可以省略

mysqldump -u root -p123456 --databases mysql_test mysql>c:\backup\data.sql

 

mysqldump -u root -p123456 --all-databases>c:\backup\alldata.sql

 

mysqldump -u root -p123456 --tab=c:\backup\mysql_test

 

mysql -u root -p123456 mysql_test<mysql_test.sql

 

mysql -u root -p123456 customers<c:\backup\customers.sql

 

mysqlimport -u root -p123456 --low-priority --replace mysql_test c:\backup\customers.txt

 

mysqlbinlog binlog.000001

 

mysqlbinlog binlog.000001>c:\backup\bin_log000001.txt

 

mysqldump -u root -p123456 mysql_test<alldata.sql

 

mysqlbinlog bin_log.000001|mysql -u root -p123456

 

mysqlbinlog bin_log.000002|mysql -u root -p123456

 

PHP的mysql数据库编程

<? php

$string="hello";

echo $string;

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456");

if(!$con){

echo "连接失败!<br>";

echo "错误编号:".mysql_errorno()."<br>";

echo "错误信息:".mysql_error()."<br>";

die();

}

echo "连接成功!<br>";

?>

 

<? php

$server="localhost:3306";

$user="root";

$pwd="123456";

$con=mysql_pconnect($server,$user,$pwd);

if(!$con){

die("连接失败!".mysql_error());

}

echo "MYSQL服务器:$server<br>用户名:$user<br>";

echo "使用函数mysql_pconnect()永久链接数据库。<br>";

?>

 

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456");

if(mysql_errno()){

echo "数据库服务器连接失败!<br>";

die();

}

mysql_select_db("mysql_test",$con);

if(mysql_errno()){

echo "数据库服务器连接失败!<br>";

die();

}

echo "数据库选择成功!<br>";

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="INSERT INTO customers(cust_id,cust_name,cust_sex,cust_address,cust_contact)";

$sql=$sql."VALUES(NULL,'李中华','M','深圳市','南山区')";

if($sql,$con){

echo "客户添加成功!<br>";

}

else

echo "客户添加失败!<br>";

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="UPDATE customers SET cust_address='广州市'";

$sql=$sql."WHERE cust_name='李中华'";

if(mysql_query($sql,$con))

echo "客户地址修改成功!<br>";

else

echo "客户地址修改失败!<br>";

?>

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="DELETE FROM customers";

$sql=$sql."WHERE cust_name='李中华'";

if(mysql_query($sql,$con))

echo "客户删除成功!<br>";

else

echo "客户删除失败!<br>";

?>

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="SELECT cust_name FROM customers";

$sql=$sql."WHERE cust_id=916";

$result=mysql_query($sql,$con);

if($result){

echo "客户查询成功!<br>";

$arry=mysql_fetch_array($result,MYSQL_NUM);

if($array){

echo "读取到客户信息!<br>";

echo "所要查询客户的姓名是:".$array[0];

}

else

echo "没有读取到客户信息!<br>"

 

}

else

echo "客户查询失败!<br>";

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="SELECT * FROM customers";

$sql=$sql."WHERE cust_sex='F'";

$result=mysql_query($sql,$con);

if($result){

echo "查询成功!<br>";

$num=mysql_num_rows($result);

echo "数据库mysql_test中女性顾客数为:".$num."位";

}

else

echo "查询失败!<br>";

?>

 

 

<? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

mysql_query("set names 'gbk'");

$sql="SELECT * FROM customers";

$sql=$sql."WHERE cust_sex='F'";

$result=mysql_query($sql,$con);

if($result){

echo "查询成功!<br>";

if(mysql_data_seek($result,2)){

$array=mysql_fetch_array($result,MYSQL_NUM);

echo "数据库mysql_test中第三位女性顾客是:".$array[1];

}

else

echo "记录定位失败!<br>";

}

else

echo "查询失败!<br>";

?>

 

 

                <? php

$con=mysql_connect("localhost:3306","root","123456")

or die("数据库服务器连接失败!<br>");

echo "已成功建立与MYSQL服务器的连接!<br>";

mysql_select_db("mysql_test",con) or die("数据库选择失败!<br>");

echo "已成功选择数据库mysql_test!<br>";

mysql_close($con) or die("关闭与MYSQL数据库服务器的连接失败!<br>");

echo "已成功关闭与MYSQL数据库服务器的连接!<br>";

?>

 

你可能感兴趣的:(sql,代码,数据库)