[code static]SQL基础语法

来源:互联网 发布:用sql语句创建表步骤 编辑:程序博客网 时间:2024/05/16 10:25
**MySQL**<html><head><meta charset="utf-8"> <title>删除 MySQL 数据库</title></head><body><?php//***************** 连接数据库 ******************//$dbhost = 'localhost:3036';$dbuser = 'root';$dbpass = 'rootpassword';$conn = mysql_connect($dbhost, $dbuser, $dbpass);if (! $conn ) {  die('连接失败: ' . mysql_error());}echo '连接成功<br />';//***************** 创建数据库 ******************//$sql = 'CREATE DATABASE RUNOOB';                {  $retval = mysql_query( $sql, $conn );                 if(! $retval ){  die('创建数据库失败: ' . mysql_error());}echo "数据库 RUNOOB 创建成功\n";                }//***************** 创建数据表 ******************//$sql = "CREATE TABLE runoob_tbl( ".       "runoob_id INT NOT NULL AUTO_INCREMENT, ".       "runoob_title VARCHAR(100) NOT NULL, ".       "runoob_author VARCHAR(40) NOT NULL, ".       "submission_date DATE, ".       "PRIMARY KEY ( runoob_id )); ";           {/*当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。添加列    ALTER TABLE testalter_tbl ADD i INT;    ALTER TABLE testalter_tbl ADD i INT FIRST;    ALTER TABLE testalter_tbl ADD i INT AFTER c;    i 字段会自动添加到数据表字段的末尾。    FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。删除列    ALTER TABLE testalter_tbl  DROP i;    如果数据表中只剩余一个字段则无法使用DROP来删除i字段。修改字段类型及名称    ALTER TABLE testalter_tbl MODIFY c CHAR(10);//MODIFY    ALTER TABLE testalter_tbl CHANGE i j BIGINT;//CHANGE    ALTER TABLE testalter_tbl CHANGE j j INT;        //在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型    ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;        //对 Null 值和默认值修改字段默认值    ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;//修改字段的默认值    ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;    //删除字段的默认值,变为NULL    ALTER TABLE testalter_tbl ENGINE = MYISAM;;        //将表 testalter_tbl 的类型修改为 MYISAM 修改表名    ALTER TABLE testalter_tbl RENAME TO alter_tbl;删除表中主键    ALTER TABLE testalter_tbl DROP PRIMARY KEY;添加主键    ALTER TABLE testalter_tbl ADD CONSTRAINT PK_STUDENT PRIMARY KEY (id,class);使用AUTO_INCREMENT    INSERT INTO insect (id,name,date,origin) VALUES    -> (NULL,'housefly','2001-09-10','kitchen'),    -> (NULL,'millipede','2001-09-10','driveway'),    -> (NULL,'grasshopper','2001-09-10','front yard');获取AUTO_INCREMENT值    mysql_query ("INSERT INTO insect (name,date,origin)    VALUES('moth','2001-09-14','windowsill')", $conn_id);    $seq = mysql_insert_id ($conn_id);    通过 mysql_insert_id ()函数来获取执行的插入SQL语句中 AUTO_INCREMENT列的值重置序列    ALTER TABLE insect DROP id;    -> ALTER TABLE insect    -> ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,    -> ADD PRIMARY KEY (id);    如果你删除了数据表中的多条记录,        并希望对剩下数据的AUTO_INCREMENT列进行重新排列,    那么你可以通过删除自增的列,        然后重新添加来实现。     不过该操作要非常小心,如果在删除的同时又有新记录添加,有可能会出现数据混乱设置序列的开始值    表创建时id INT UNSIGNED NOT NULL AUTO_INCREMENT = 100,    表创建后ALTER TABLE t AUTO_INCREMENT = 100;创建索引    直接创建    CREATE INDEX indexName ON mytable(username(length));         如果是CHAR,VARCHAR类型,length可以小于字段实际长度;        如果是BLOB和TEXT类型,必须指定 length。    修改表结构        ALTER mytable ADD INDEX [indexName] ON (username(length))     创建表的时候直接指定    CREATE TABLE mytable(          ID INT NOT NULL,           username VARCHAR(16) NOT NULL,          INDEX [indexName] (username(length))      );     唯一索引        CREATE UNIQUE INDEX indexName ON mytable(username(length))         ALTER table mytable ADD UNIQUE [indexName] (username(length))        CREATE TABLE mytable(              ID INT NOT NULL,               username VARCHAR(16) NOT NULL,              UNIQUE [indexName] (username(length))          );  添加索引    ALTER TABLE testalter_tbl ADD INDEX index_name (name);查看索引    SHOW INDEX FROM testalter_tbl;添加唯一限制条件索引    ALTER TABLE testalter_tbl ADD UNIQUE emp_name(age);删除索引    ALTER TABLE testalter_tbl DROP INDEX index_name;*//*临时表    CREATE TEMPORARY TABLE SalesSummary (...)        临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。        若使用PHP脚本来创建MySQL临时表,那没当PHP脚本执行完成后,该临时表也会自动销毁。*/}//***************** 选择数据库 ******************//mysql_select_db( 'RUNOOB' );                     {$retval = mysql_query( $sql, $conn );if(! $retval ){  die('数据表创建失败: ' . mysql_error());}echo "数据表创建成功\n";                        }//***************** 查询数据 ********************//$sql = 'SELECT runoob_id,     runoob_title,                runoob_author, submission_date        FROM   runoob_tbl';                      {/*SELECT field1, field2,...fieldN FROM table_name1, table_name2...[WHERE condition1 [AND [OR]] condition2.....       /condition:/  field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'ORDER BY field1, [field2...] [ASC [DESC]]    //ASC 或 DESC 来设置查询结果是按升序或降序排列。默认升序排列GROUP BY name           //SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;    //在分组的列上可用 COUNT, SUM, AVG,等函数    //**    SELECT column_name, function(column_name)    FROM table_name    WHERE column_name operator value    GROUP BY column_name;    //**WITH ROLLUP    //WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)    //SELECT name, SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;    //SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;[OFFSET M ][LIMIT N]    //OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0    //LIMIT 属性来设定返回的记录数$sql = 'SELECT runoob_id,    runoob_title,                runoob_author, submission_date        FROM   runoob_tbl        WHERE  runoob_author="Sanjay"';$sql = 'SELECT runoob_id, runoob_title,                runoob_author, submission_date        FROM runoob_tbl        WHERE runoob_author LIKE "%jay%"';$sql = 'SELECT a.runoob_id, a.runoob_author,                b.runoob_count         FROM   runoob_tbl a INNER JOIN tcount_tbl b         ON     a.runoob_author = b.runoob_author';        //也可以省略 INNER,使用 JOIN,效果一样        //inner join 取交集        //left  join 取左集(语句中先声明的表的 数据)        //right join 取右集SELECT country, name FROM WebsitesWHERE country='CN'UNION ALL   //DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。            //ALL:      可选,返回所有结果集,包含重复数据。SELECT country, app_name FROM appsWHERE country='CN'ORDER BY country;|--------+---------||country +  name   ||--------+---------||CN      +淘宝 web ||CN      +淘宝 app ||CN      +QQ web   ||CN      +QQ app   ||--------+---------|//正则表达式//查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';*/mysql_select_db('RUNOOB');$retval = mysql_query( $sql, $conn );if(! $retval ){  die('Could not get data: ' . mysql_error());}//MYSQL_NUM   返回数字数组//MYSQL_ASSOC 返回关联数组while($row = mysql_fetch_array($retval, MYSQL_ASSOC)){// mysql_fetch_assoc($retval)    echo "Tutorial ID :{$row['runoob_id']}  <br> ".         "Title: {$row['runoob_title']} <br> ".         "Author: {$row['runoob_author']} <br> ".         "Submission Date : {$row['submission_date']} <br> ".         "--------------------------------<br>";} //执行完SELECT语句后,释放游标内存是一个很好的习惯mysql_free_result($retval);echo "Fetched data successfully\n";             }//***************** 插入数据 ********************//$sql = "INSERT INTO runoob_tbl ".       "(runoob_title,runoob_author, submission_date) ".       "VALUES ".       "('$runoob_title','$runoob_author','$submission_date')";{/*防止表中出现重复数据    1.CREATE TABLE person_tbl(        first_name CHAR(20) NOT NULL,        last_name CHAR(20) NOT NULL,        sex CHAR(10),        PRIMARY KEY (last_name, first_name)      );      设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性      设置表中字段first_name,last_name数据不能重复,双主键模式保证      如果我们设置了唯一索引,那么在插入重复数据时,SQL语句将无法执行成功,并抛出错。数据的唯一性      忽略数据库中已经存在的数据    2.INSERT IGNORE INTO person_tbl (last_name, first_name)VALUES( 'Jay', 'Thomas');      INSERT IGNORE INTO当插入数据时,在设置了记录的唯一性后,      如果插入重复数据,将不返回错误,只以警告形式返回。       而REPLACE INTO into      如果存在primary 或 unique相同的记录,则先删除掉。      再插入新记录。    3.添加一个UNIQUE索引      CREATE TABLE person_tbl(        first_name CHAR(20) NOT NULL,        last_name CHAR(20) NOT NULL,        sex CHAR(10)        UNIQUE (last_name, first_name)      );统计重复数据    SELECT COUNT(*) as repetitions, last_name, first_name//COUNT(*)列出可能有重复数据的列    -> FROM person_tbl    -> GROUP BY last_name, first_name    -> HAVING repetitions > 1;//HAVING子句设置重复数大于1过滤重复数据    使用DISTINCT        SELECT DISTINCT last_name, first_name        -> FROM person_tbl        -> ORDER BY last_name;    使用 GROUP BY 来读取数据表中不重复的数据        SELECT last_name, first_name        -> FROM person_tbl        -> GROUP BY (last_name, first_name);删除重复数据    mysql> CREATE TABLE tmp SELECT last_name, first_name, sex    ->                  FROM person_tbl;    ->                  GROUP BY (last_name, first_name);    mysql> DROP TABLE person_tbl;    mysql> ALTER TABLE tmp RENAME TO person_tbl;    或者添加 INDEX(索引) 和 PRIMAY KEY(主键)    mysql> ALTER IGNORE TABLE person_tbl    -> ADD PRIMARY KEY (last_name, first_name);*/mysql_select_db('RUNOOB');$retval = mysql_query( $sql, $conn );if(! $retval ){  die('Could not enter data: ' . mysql_error());}       echo "Entered data successfully\n";}//***************** 更新数据 ******************//$sql = 'UPDATE runoob_tbl        SET runoob_title="Learning JAVA"        WHERE runoob_id=3';//***************** 删除数据 ******************//   $sql = 'DELETE FROM runoob_tbl        WHERE runoob_id=3';//***************** 删除数据表 ******************//$sql = "DROP TABLE runoob_tbl";                    {mysql_select_db( 'RUNOOB' );$retval = mysql_query( $sql, $conn );if(! $retval ){  die('数据表删除失败: ' . mysql_error());}echo "数据表删除成功\n";}//***************** 删除数据库 ******************//$sql = 'DROP DATABASE RUNOOB';                  {$retval = mysql_query( $sql, $conn );if(! $retval ){  die('删除数据库失败: ' . mysql_error());}echo "数据库 RUNOOB 删除成功\n";}//***************** 关闭数据库 ******************//mysql_close($conn);//***************** 事务 *******************//$handler=mysql_connect("localhost","root","password");mysql_select_db("task");mysql_query("SET AUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行mysql_query("BEGIN");//开始事务定义if(!mysql_query("insert into trans (id) values('2')")){    mysql_query("ROLLBACK");//判断当执行失败时回滚}if(!mysql_query("insert into trans (id) values('4')")){    mysql_query("ROLLBACK");//判断执行失败回滚}mysql_query("COMMIT");//执行事务mysql_close($handler);//***************** 复制表 *******************////步骤一:获取数据表的完整结构SHOW CREATE TABLE runoob_tbl \G;//步骤二:修改SQL语句的数据表名,并执行SQL语句。//从步骤一的显示中直接抄CREATE TABLE `runoob_tbl` (  `runoob_id` int(11) NOT NULL auto_increment,  `runoob_title` varchar(100) NOT NULL default '',  `runoob_author` varchar(40) NOT NULL default '',  `submission_date` date default NULL,  PRIMARY KEY  (`runoob_id`),  UNIQUE KEY `AUTHOR_INDEX` (`runoob_author`)) ENGINE=InnoDB //步骤三:执行完第二步骤后,你将在数据库中创建新的克隆表 clone_tbl。 //如果你想拷贝数据表的数据你可以使用 INSERT INTO... SELECT 语句来实现。INSERT INTO clone_tbl (runoob_id,                       runoob_title,                       runoob_author,                       submission_date)    SELECT runoob_id,runoob_title,           runoob_author,submission_date    FROM   runoob_tbl;//***************** 元数据 ****************//        获取服务器元数据命令              描述SELECT VERSION( )   服务器版本信息SELECT DATABASE( )  当前数据库名 (或者返回空)SELECT USER( )      当前用户名SHOW STATUS         服务器状态SHOW VARIABLES      服务器配置变量//***************** 导出数据 ****************//mysql> SELECT * FROM passwd     INTO OUTFILE '/tmp/tutorials.txt'    -> FIELDS TERMINATED BY ',' ENCLOSED BY '"'    -> LINES  TERMINATED BY '\r\n';    //在UNIX中,该文件被创建后是可读的,权限由MySQL服务器所拥有。    //这意味着,虽然你就可以读取该文件,但可能无法将其删除。//***************** 导出数据 ****************//LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;    //指定LOCAL关键词,表明从客户主机上按路径读取文件。    //如果没有指定,则文件在服务器上按路径读取文件mysql> LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl  -> FIELDS TERMINATED BY ':'  -> LINES TERMINATED BY '\r\n';    //如果用户指定一个 FIELDS 子句,    //它的子句 (TERMINATED BY、[OPTIONALLY] ENCLOSED BY 和 ESCAPED BY) 也是可选的,    //用户必须至少指定它们中的一个。mysql> LOAD DATA LOCAL INFILE 'dump.txt'     -> INTO TABLE mytbl (b, c, a);    //在数据文件中的列顺序是 a,b,c,但在插入表的列顺序为b,c,a,则数据导入语法如下:?></body></html>
0 0
原创粉丝点击