zoukankan      html  css  js  c++  java
  • MySQL 常用SQL语句

    mysql教程

    ■  在DOS命令行启动MYSQL服务:

    net start mysql

    在DOS命令行停止MYSQL服务:

    net stop mysql

    查看被监听的端口:

    netstat –na | findstr 3306

    findstr用于查找后面的端口是否存在。


    创建数据库用户:只有根用户(root)才有创建新用户的权限

    CREATE USER user_name1 IDENTIFIED BY ‘password’,

     user_name2 IDENTIFIED  BY ‘password’;

    一次可以创建多个数据库用户

    删除数据库用户:

    DROP USER user_name;

    选择用户:

    select user();

    用户的权限控制:

    GRANT库,表级的权限控制:将某个库中的某个表的控制权限赋予某个用户

    GRANT ALL ON db_name.table_name TO  uer_name [indentified by ‘password’];

    查看所有的字符编码:

    SHOW CHARACTER SET;  

    ==============================================================================

    登录MySQL数据库: 在DOS命令行登录MYSQL控制台

    mysql -u user_name -p(Enter,回车键入密码,若直接输入则为可显)

    Enter password:*********

    Mysql –h hostname –u user_name –p

    Enter password:*********

    例:mysql –h 192.168.5.105 –uroot –p

    Enter password:*******

    查看运行环境信息:

    进入MYSQL命令行工具后 , 使用status;或\s 查看运行环境信息

    创建数据库:

    create database db_name;

    [default]CHARACTER SET charset_name        //设置数据库的编码发方式

    [default]COLLATE collation_name ;          //设置按collation_name字段排序

    //不能写成utf-8,utf8的默认校对为utf8_general_ci(通过show character set查看)

    CREATE DATABASE db_name CHARACTER SET utf8 COLLATE  utf8_general_ci; 

    CHARACTER SET:指定数据库采用的字符集

    COLLATE:指定数据库字符集的比较方式

    使用数据库:

    use db_name;           

    显示数据库

    SHOW DATABASES

    显示数据库创建语句

    SHOW CREATE DATABASE db_name;

    删除数据库

    DROP DATABASE  db_name;

    删除时可先判断是否存在,写成:DROP DATABASE IF EXISTS db_name;

    查看创建数据库的指令并查看数据库使用的编码

    show create databasedb_name;

    查看数据库编码:

    showvariables like ‘char%’;

    查看数据库当前引擎:

    SHOW CREATE TABLE table_name;

    修改数据库当前引擎:

    ALTER TABLE table_name ENGINE=MYISAM| INNODB;( ‘|’表示‘或者’,选其一)

    你能用的数据库引擎取决于mysql在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。

    设置数据库编码:

    setcharacter_set_client=gbk;//可以存中文

    setcharacter_set_results=gbk;//可以看中文

    备份数据库:

    MYSQLDUMP –u用户名(根用户) –p密码 db_name >  存放路径级/文件名(文件格式:.sql)

    (不是在mysql控制台执行,而要退出控制台在DOS下执行

    例子:

    MYSQLDUMP –u root –p******* mydb > D:/mydb.sql;

    恢复数据库

    前提:要创建一个空数据库

    SOURCE 存放路径/文件名.sql (在Mysql控制台执行)

    如何将大量数据存入数据库中的表中:

    首先,将数据按表的结构(字段的顺序要对应)存入文本文档中;

    然后,某字段若没有值则填入NULL,注意,每个字段值之间用Tab键隔开(/r/n)。

    最后,使用命令:LOAD DATA LOCAL INFILE ‘E:/Test/pet.txt’ INTO TABLE pet  LINES

                   TERMINATED BY ‘\r\n’;


    Terminate 结束,终止;

    创建表:

    1.CREATE TABLE pet (

    id int PRIMARY KEY AUTO_INCREMENT ,

    name VARCHAR(20) NOT NULL UNIQUE,

    owner VARCHAR(20) NOT NULL,

    species VARCHAR(20),

    sex CHAR(1),

    birth DATE ,

    );

    2.CREATE TABLE table_name(

       field1  datatype,

       field2  datatype,

       ……

    )CHARACTER SET 字符集 COLLATE 校对规则;

     field:指定列名    datatype:指定列类型

    显示表:

    show tables

    显示某个表创建时的全部信息:

    SHOW CREATE TABLE table_name;

    显示表的结构信息

    DESCRIBE table_name;    缩写形式 : desc table_name;

    查找数据:

    SELECT * FROM table_name;

    显示表的各字段:

    DESCRIBE table_name;

    清空表中的数据:

    1.TRUNCATE table_name;

    此方法会使表中的取号器(ID)从1开始

    2.DELETE FROM table_name;
    不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。
    delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。 

    注意:在MySQL中事务的特殊说明:

    1.  mysql控制台是默认自动提交事务(dml).

    2.  若在控制台使用事务,应该做以下设置:

    *SETAUTOCOMMIT=FALSE;    //解除自动提交功能

    *SAVEPOINT point;         //设置保存点point

    //一系列操作…

    *ROLLBACK TOpoint;      //回滚到保存点

    使用TRUNCATE table_name删除的表不能够回滚,但删除速度较快,

    使用DELETE FROM table_name删除的表可以回滚,删除速度相对较慢。

    创建表:

    CREATE TABLE table_name;

    删除表:

    DROP TABLE table_name;     

    插入数据:

    1.INSERT INTO table_name [(字段1,字段2,字段3,…)] VALUES (值1,值2,…);

    如果向表中的每个字段都插入一个值,那么前面[]括号内字段名可写也可不写。

    2.INSERT INTO pet  VALUES('Puffball','Diane','hamster','f','1999-03-30',NULL);

    3.从 源表 中筛选符合条件的记录,批量插入到 (指定的)目标表 中:

    insert into 目标表(字段1, 字段2,...字段n) select 字段1, 字段2,...字段n from 源表 where 条件

    4.向表中插入条数据:

    insert into articles (id, content,userid)

    values (2,’hahaha’,11),(null,’xixixi’,10),(13,’aiaiai’,1),…;

    删除数据:

    DELETE FROM table_name WHERE id=’10’;

    delete语句不能删除某一列的值,可使用update更新列值。

    使用delete语句仅删除记录,不删除表本身,删除表使用drop table语句。

    更新数据:

    UPDATE pet SET birth = '1989-08-31'WHERE name = 'Bowser' ORDER BY birth DESC;

    ASC(升序,默认方式);DESC(降序)

    WHERE 和 ORDER 语句也可用于查询select 与 删除delete

    查询数据:

    1.SELECT * FROM pet WHERE name = 'Bowser';

    SELECT * FROM pet WHERE birth > '1998-1-1';

    SELECT * FROM pet WHERE species = 'dog' AND sex ='f';

    SELECT * FROM pet WHERE species = 'snake' OR species= 'bird';

    SELECT * FROM pet WHERE (species = 'cat' AND sex ='m')

              OR(species = 'dog' AND sex = 'f');

    SELECT name, birth FROM pet;

    SELECT chinese+english+math  FROM Students;    //列之间可以进行运算

    2.增加关键字DISTINCT检索出每个唯一的输出记录,把相同的记录值取其中一个即可。

    SELECT DISTINCT owner FROM pet; //distinct [dɪ'stɪŋkt] 截然不同的

    3.使用一个WHERE子句结合行选择与列选择:

    SELECT name, species, birth FROM pet

            WHEREspecies = 'dog' OR species = 'cat';

    4.为了排序结果,使用ORDER BY子句:

    SELECT name, birth FROM pet WHERE species = 'dog' ORDERBY birth;

    默认排序是升序,最小的值在第一。要想以降序排序,在你正在排序的列名上增加DESC(降

    序)关键字:

    SELECT name, birth FROM pet ORDER BY birth DESC;

    5.可以对多个列进行排序,并且可以按不同的方向对不同的列进行排序:

    SELECT name, species, birth FROM pet

    ORDER BY species, birth DESC;

    注意DESC关键字仅适用于在它前面的列名(birth);不影响species列的排列顺序。

    6.MySQL提供了几个函数,可以用来计算日期,例如,计算年龄或提取日期部分:

    SELECT name, birth, CURDATE(),((YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(),5)<RIGHT(CURDATE(),5)) AS age FROM pet;

    YEAR()提取日期的年部分,RIGHT()提取日期的MM-DD (日历年)部分的最右面5个字符。比较MM-DD值的表达式部分的值一般为1或0,若birth月份比当前月份大,则年份应减去1。

    SELECT name, birth, death FROM pet WHERE death ISNOT NULL ORDER BY birth;

    使用deathIS NOT NULL而非death != NULL,因为NULL是特殊的值,不能使用普通比较符来比较。

    7.MySQL提供几个日期部分的提取函数,例如YEAR( )、MONTH( )和DAYOFMONTH()。

    SELECT name, birth, MONTH(birth) FROM pet;

    SELECT name, birth FROM pet WHEREMONTH(birth) = 5;

    概念上,NULL意味着“没有值”或“未知值”,且它被看作与众不同的值。不能使用算术比较操作符例如=、<或!=。

    请注意在MySQL中,0或NULL意味着而其它意味着。布尔运算的默认值是1.

    8.同表查询:

    SELECTa.id,a.nikename,a.address FROM users a,users b WHERE b.nikename=’haha’

    anda.id>b.id;

    也可写成

    SELECT id,nikename,addressFROM users WHERE id>(SELECT id FROM users WHERE nikename=’haha’);

    补充:在WHERE子句中经常使用的运算符

     

     

    比较运算符

    >、< 、<= 、>= 、= 、<>

    大于、小于、大于(小于)等于、不等于

    BETWEEN   …AND…

    显示在某一区间的值

    IN(set)

    显示在IN列表中的值,例:IN(100,200)

    LIKE ‘张pattern’

    模糊查询

    IS NULL 

    判断是否为空

     

    逻辑运算符

    AND

    多个条件同时成立

    OR

    多个条件任一成立

    NOT

    不成立,例:where not(salary>100);

    注:LIKE语句中,%代表零个或多个任意字符,_代表一个字符,例firstname like ‘_a%’;

     

    9.使用GROUP BY子句对列进行分组:

    SELECTcolumn1,column2,column3… FROM table_name GROUP BY column;

    SELECTproduct,sum(price) FROM orders GROUP BY product;

    10.使用HAVING 子句过滤:

    SELECT column1,column2,column3…FROMtable_name GROUP BY column HAVING…

    SELECTproduct,sum(price) FROM orders GROUP BY product HAVING sum(price)>100;

    HAVING和WHERE均可实现过滤,但在HAVING可以使用合计函数,HAVING通常跟在GROUP BY后,它作用于组。

    …GROUP BY …HAVING…ORDERBY…

    对表进行重命名:

    1.RENAME TABLE table_name TO new_name;
    2.ALTER TABLE table_name RENAME TO new_table_name;

    ■  修改表结构:增加字段

    1.增加一个字段

    ALTER TABLE table_name ADD COLUMN(字段名 字段类型);---此方法带括号

    2.增加一个字段在指定的位置

    ALTER TABLE table_name ADDCOLUMN 字段名 字段类型 AFTER 某字段;

    ■  修改表结构:删除字段

    ALTER TABLE table_name drop 字段名;

    修改表结构:改变字段名称/类型:

    ALTER TABLE table_name CHANGE COLUMN field_namenewfield_name varchar(10) not null;

    其中char(20) notnull是newcolumn_name字段的create_definition.

    增加约束:约束(主键Primary Key、唯一性Unique、非空Not NULL)

    1.ALTER TABLE table_name CHANGE old_id new_id INT(16) NOT NULL PRIMARY KEY;

    2.自动增长:

    ALTER TABLE table_name CHANGE old_id  new_id INT(16) NOT NULL AUTO_INCREMENT;

    修改表的字符集:

    ALTER TABLE table_name CHARACTER SET UTF8;

    ■  查看某字段使用的编码:

    SELECTCHARSET(column_name) FROM table_name;

    ==============================================================================

     

    插入数据库是出现乱码的参考解决方案:

    1。 数据库字符集设置为GB2312。(但就是插不成功显示Datato lang 吧!)

    2。关键在创建表的时候:

    create table (字段) Default character set gb2312;

    3。表创建好的情况下:

    修改表编码: alter table 表名 Default character set gb2312;

    修改字段编码: ALTERTABLE 表名 CHANGE COLUMN 字段名CHARACTER SET gb2312;

     

    ==============================================================================

     

    #查看数据库的版本,当前日期(不区分大小写)

    Mysql> selectVERSION(),CURRENT_DATE,NOW();

     

  • 相关阅读:
    Android 按键消息处理Android 按键消息处理
    objcopy
    SQLite多线程读写实践及常见问题总结
    android动画坐标定义
    Android动画效果translate、scale、alpha、rotate
    Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
    Flatten Binary Tree to Linked List
    Distinct Subsequences
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3076706.html
Copyright © 2011-2022 走看看