您的位置:新葡亰496net > 网络数据库 > 新葡亰496net:mysql的多少个知识点,数据库优化学

新葡亰496net:mysql的多少个知识点,数据库优化学

发布时间:2019-10-20 23:47编辑:网络数据库浏览(197)

    常用命令

    规范化:能用可视化学工业具的尽量接纳工具,命令行只限于难点每种核实。

    mysql -u ACCOUNT -pPWD -h IP -P port [-D database]  //连接数据库
    show databases; //显示数据库列表
    use db_name;    //使用数据库
    show tables; //展示所有表
    select XXX from XXX where XXX;
    select count(*) from XXX;   //统计总记录
    

    数据库基础不是很稳固,补充下基础。

    count(*) 和 count(**1**)和count(列名)区别  
    实施职能上:  
    count(*)饱含了富有的列,相当于行数,在计算结果的时候,不会忽略列值为NULL  
    count(1)包含了颇有列,用1象征代码行,在计算结果的时候,不会忽略列值为NULL  
    count(列名)只囊括列名那一列,在总计结果的时候,会忽略列值为空(这里的空不是只空字符串大概0,而是意味着null)的计数,即某些字段值为NULL时,不总计  

    mysql> select * from wifi_data where dev_id like "0023-AABBCCCCBBAA" ;

    删去数据的三种办法

    delete from tablename [where XXX]; //可以指定条件,删除整表/部分记录,会返回被删除记录数,执行速度不快
    truncate TABLE tablename; //不可指定条件,删除整表,返回记录数为0,执行非常快,不可以恢复数据
    delete from tablename where 1; //删除所有记录后,自增字段不会恢复为1
    

    敲定:delete的功效有一些像将mysql表中持有记录一条一条删除到删完,而truncate也等于保留mysql表的布局,重新创制了这些表,全部的动静都也正是新表。

    周边的数据库

    阶层型数据库:用树型结构保留的数据库。

    关系型数据库:见下图

    新葡亰496net 1

    新葡亰496net:mysql的多少个知识点,数据库优化学习笔记。重点由字段和著录构成了关系表,多少个涉及表构成了数据库,称为关系型数据库(PAJERODB)。

    概念解释:主键:一张表只可以有八个主键,值是举世无双的。外键:与主键关联用的表面表中的参照键,外键的域值必需维持与主键适合的数量。那也是名称叫关系型数据库的原由。

    面向对象型数据库:以目的的艺术存款和储蓄在数据库中,解决了数据库字段映射到代码中目的的问题。

    XML数据库:数据表之间的关系非常小,所以修改表的结构很方便。

    实行功用上:  
    列名称叫主键,count(列名)会比count(1)快  
    列名不为主键,count(1)会比count(列名)快  
    如若表八个列并且未有主键,则 count(1) 的推行功效优于 count(*)  
    风度翩翩旦有主键,则 select count(主键)的施行效用是最优的  
    假若表独有四个字段,则 select count(*)最优

    1、展现数据库列表。
    show databases;
    刚开始时才八个数据库:mysql和test。mysql库很主要它此中有MYSQL的系统音信,我们改密码和新增加客商,实际上固然用这几个库实行操作。

    count(1)、count(*)、count(column)

    • count(*)——对行的数据实行测算,包蕴NULL
    • count(column)——对特定的列的值具备的行数进行计算,不分包NULL值
    • count(1)——和count(*)效果同样

    根本结论:

    1. 列名称叫主键,count(列名)会比count(1)快。
    2. 列名不为主键,count(1)会比count(列名)快。
    3. 举个例子表多少个列且没有主键,那么count(1)比count(*)快.
    4. 若果有主键,count(主键,联合主键)比count(*)快.
    5. 如若表独有贰个字段,count(*)最快。

    关系型数据库(MYSQL)常用语句

    安插命令:INSERT INTO TABLE (column1,column2) VALUES ('value1','value2');

    立异命令:UPDATE TABLE SET column1='value1',column2='value2' WHERE column_name= 'value';

    删去命令:DELETE FROM table WHERE column_name= value;

    查询语句:

    (1)钦命列名:select column_name from table;

       (2)内定条件检索:select * from table where column_name='value';

       (3)模糊检索:select * from table where column_name like "some_value%";

    地点那句就是检索column_name列中以some_value开端的全部记录

    (4)NULL检索:数据库检索条件为空,不能够用where column_name=NULL。要用is

    例:select * from table where column_nameis NULL

      (5)多规格检索间用 or 大概 and 串行起来,多个尺码有运算优先级:括号>NOT>AND>OQX56

    (6)结果排序:order by column_name ase(升序,默认) order by column_name desc

       (7)取内定件数间(m,n)的记录。LIMIT 0,3

    (8)数据分组:以一定的重大字对记录举办整理被成为分组化,使用的GROUP BY语句。并且常和总括函数一齐行使。(如AVG,COUNT等)

    例:select sex ,count(sex) as ctb from customer group by sex;

    地点语句正是查询customer表中的sex的数码并计算种种sex的件数,件数设置了新的别称:ctb。

    结果:   sex     ctb

                    0       2

                     1      4

    上边结果表示:该表中性别为0的人有2个,性别为1的有4个。

    因为count平时使用,所以转发点count的知识点:

    1.count()函数是用来总计表中著录的一个函数,重返相称原则的行数。

    2.count()语法:

    (1)count(*)---饱含具有列,重回表中的记录数,也等于总结表的行数,在计算结果的时候,不会忽视列值为NULL的记录。

    (2)count(1)---忽视全部列,1表示叁个固定值,也可以用count(2)、count(3)替代,在计算结果的时候,不会忽略列值为NULL的笔录。

    (3)count(列名)---只包蕴列名钦赐列,再次来到钦定列的记录数,在总括结果的时候,会忽略列值为NULL的记录(不富含空字符串和0),即列值为NULL的笔录不总括在内。

    (4)count(distinct 列名)---只囊括列名内定列,重返钦点列的不一样值的记录数,在计算结果的时候,在总括结果的时候,会忽视列值为NULL的笔录(不包蕴空字符串和0),即列值为NULL的记录不总结在内。

    3.count(*)&count(1)&count(列名)实践成效比较:

    (1)借使列为主键,count(列名)功用优于count(1)

    (2)如果列不为主键,count(1)效能优于count(列名)

    (3)假诺表中存在主键,count(主键列名)作用最优

    (4)如若表中唯有一列,则count(*)效能最优

    (5)即使表有多列,且不设有主键,则count(1)功能优于count(*)

    4.因为count(*)和count(1)计算进程中不会忽视列值为NULL的记录,所以能够透过以下三种方式来总括列值为NULL的记录数:

    (1)select count(*) from table where is_active is null;

    (2)select count(1) from table where is_active is null;

    5.特例:

    (1)select count('') from table;-再次来到表的记录数

    (2)select count(0) from table;-再次回到表的记录数

    (3)select count(null) from table;-返回0

    当表的数据量大些时,对表作分析之后,使用count(1)还要比选用count(*)用时多了! 
    实践布署上:
    count(1)和count(*)的职能是千篇风华正茂律的。 然而在表做过分析之后,count(1)会比count(*)的用时小量(1w以内数据量),然而差不了多少。  假诺count(1)是聚索引,id,那一定是count(1)快。但是差的相当小的。 因为count(*),自动会优化钦点到那么些字段。所以没须求去count(1),用count(*),sql会帮你落成优化的

    2、展现库中的数据表:
    use mysql; //打开库,学过FOXBASE的自然不会面生吧
    show tables;

    多个表的三番五次

    举例有两张表:

    新葡亰496net 2

    对应:select 表名1.列名1,表名2.列名2 from 表名2 on 表1.外键=表2主键 【where/order by 语句】

    内连接:select user.name,order_basic.oid from order_basic inner join user on order_basic.uid =user.id

    外接连——左外连接:select user.name,order_basic.oid from order_basic left outer user on order_basic.uid =user.id

    外接连——右外连接:select user.name,order_basic.oid from order_basic right outer user on order_basic.uid =user.id

    三者的界别:内连接查询出来的列是多个表皆某些数据,左外连接查询出来的是前面多少个表中右边那多少个有的数据,侧面没有的会为null,同理,右外连接查询出来的是末端七个表中侧面这几个有的数据,左侧未有的会为null。见图。

    新葡亰496net 3

    因此:count(1)和count(*)基本上是没差别! sql调优作用

    3、展现数据表的布局:
    describe 表名;

    4、建库:
    create database 库名;

    5、建表:
    use 库名;
    create table 表名 (字段设定列表);
    如下:
    CREATE TABLE `wifi_test` (
     `dev_id` varchar(30) NOT NULL default '' COMMENT '设备ID',
     `timestamp` varchar(50) NOT NULL default '' COMMENT '时间',
     `interval` tinyint(1) NOT NULL default '1' COMMENT '上传间隔',
     PRIMARY KEY  (`dev_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    6、删库和删表:
    drop database 库名;
    drop table 表名;

    7、将表中记录清空:
    delete from 表名;

    8、展现表中的记录:
    select * from 表名;

    9、表数据中的增加和删除改查
    (全体安插)insert into 表名 valus('','',……,'');
    (部分插入)insert into 表名(列x,列y,……,列z) valus('','',……,'');
    insert into wifi_test values("1234567890ab","201506161330","300");
    insert into wifi_test values("1234567890ad","201506161332",0);
     insert into wifi_test(dev_id,timestamp) values("1234567890ag","201506181405");
     insert into wifi_test(timestamp) values("201506181505");
    select * from wifi_test;

    10.向表中剔除行数据:
    delect from 表名;(清空表)
    delect from 表名 where [查究条件表达式]
    delete from wifi_test where dev_id=1234567890ab;
    delete from table_xx where catch_time LIKE '2016-07-14 20:22:%';  

    11.修改,改造表中的数据:
    update 表名 set 列名='表达式' [from 另一表名] where [搜寻条件表达式];
    update wifi_test set interval='300' where dev_id=1234567890ag;
    update wifi_test set interval=replace(interval,127,80);
     update wifi_test set timestamp=20150618143333 where dev_id;

    update语法
    Single-table语法:
    UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
        SET col_name1=expr1 [, col_name2=expr2 ...]
        [WHERE where_definition]
        [ORDER BY ...]
        [LIMIT row_count]
    Multiple-table语法:
    UPDATE [LOW_PRIORITY] [IGNORE] table_references
        SET col_name1=expr1 [, col_name2=expr2 ...]
        [WHERE where_definition]

    UPDATE语法能够用新值更新原有表行中的各列。SET子句提示要修改哪些列和要给与什么值。WHERE子句钦赐应立异哪些行。若无WHERE子句,则更新具备的行。假若钦点了ORDER BY子句,则遵照被钦点的逐风华正茂对行进行更新。LIMIT子句用于给定多个限值,限制能够被更新的行的多少。

    万风流罗曼蒂克你在三个表达式中通过tbl_name访谈一列,则UPDATE使用列中的当前值。比方,以下语句把年纪列设置为比如今值多后生可畏:
    UPDATE persondata SET age=age 1;
    UPDATE赋值被从左到右评估。譬喻,以下语句对岁数列加倍,然后再开展追加:
    UPDATE persondata SET age=age*2, age=age 1;
    若是你把一列设置为其日前带有的值,则MySQL会注意到那或多或少,但不会更新。
    update表的少数字段为null
    update person set number=null,name=null;
    借使您把被已定义为NOT NULL的列更新为NULL,则该列被安装到与列类型对应的暗中同意值,並且累积警示数。对于数字类型,暗中同意值为0;对于字符串类型,暗中认可值为空字符串('');对于日期和岁月档案的次序,私下认可值为“zero”值。

    四个表的UPDATE操作
    UPDATE items,month SET items.price=month.price WHERE items.id=month.id;
    如上的例子突显出了应用逗号操作符的中间联合,不过multiple-table UPDATE语句能够动用在SELECT语句中允许的别的项指标七只,例如LEFT JOIN,然而你无法把O冠道DEENCORE BY或LIMIT与multiple-table UPDATE相同的时间使用。

    12.查询表中的数据:select          */表字段1,表字段2,……表字段n     from 表名 【where 查询条件】;
    mysql> select * from student;
    mysql> select * from student where id=1;
    mysql> select id,name from student;
    mysql> select id,name from student where id in(1,3,4);//in代表集合。

     

     //看当前利用的是哪位数据库 ,假诺您还没选取任何数据库,结果是NULL。
    mysql>select database();
    ------------
    | DATABASE() |
    ------------
    | menagerie  |
    ------------

    //查看有如何数据库
     mysql> show databases;
    --------------------
    | Database           |
    --------------------
    | information_schema |
    | mysql              |
    | test               |
    --------------------

    //选拔数据库
    mysql>use test;  //;号无关紧要,必得单行使用.  

    为了寻觅当下的数据库包括哪些表(举个例子,当您不能够明确四个表的名字),使用那些命令:

    //看数据Curry有啥样表
    mysql>show tables;
    ---------------------
    | Tables in menagerie |
    ---------------------
    | event               |
    | pet                 |
    ---------------------
    只要你想要知道一个表的协会,能够选拔DESCENVISIONIBE命令;它显得表中各种列的消息:

    //看表里有如何列
    mysql> describe pet;
    --------- ------------- ------ ----- --------- -------
    | Field   | Type        | Null | Key | Default | Extra |
    --------- ------------- ------ ----- --------- -------
    | name    | varchar(20) | YES  |     | NULL    |       |
    | owner   | varchar(20) | YES  |     | NULL    |       |
    | species | varchar(20) | YES  |     | NULL    |       |
    | ***     | char(1)     | YES  |     | NULL    |       |
    | birth   | date        | YES  |     | NULL    |       |
    | death   | date        | YES  |     | NULL    |       |
    --------- ------------- ------ ----- --------- -------
    Field展现列名字,Type是列的数据类型,Null表示列是不是能饱含NULL值,Key展现列是或不是被索引而Default钦命列的私下认可值。

    若是表有索引,SHOW INDEX FROM tbl_name生成有关索引的音讯。

    除去数据库.
    mysql>drop database test;  

     如先输入mysql,成功运行后输入use mysql,出现如下错误:Access denied for user ''@'localhost' to database 'mysql'
    还会有,输mysql可以,输mysql -u root就出错了:
    Access denied for user 'root'@'localhost' (using password: NO).
    The reason is:
    是前日翻新ROOT密码时出错
    update user set password = '123456' where user ="root" //那样写是错的,密码其实不是123456
    应该为update user set password = password ('123456') where user = "root"
    具体操作步骤:
    关闭mysql:
    # service mysqld stop
    然后:
    # mysqld_safe --skip-grant-tables(该命令达成后,只怕极端不会唤醒输入下一命令,上边三令五申在新开的终点中贯彻)
    启动mysql:
    # service mysqld start
    mysql -u root
    mysql> use mysql
    mysql> UPDATE user SET Password=PASSWORD('xxx') WHERE user='root';
    mysql> flush privileges;
    mysql>q

    ERROR 1044 (42000): Access denied for user ''@'localhost' to database
     解决 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 问题
    最近新装好的mysql在踏向mysql工具时,总是有错误提醒:
    # mysql -u root -p
    Enter password:
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    或者
    # mysql -u root -p password 'newpassword'
    Enter password:
    mysqladmin: connect to server at 'localhost' failed
    error: 'Access denied for user 'root'@'localhost' (using password: YES)'
    后天终于找到消除办法了。本来筹算重装的,以往不必了。
    艺术操作很简短,如下:
    # /etc/init.d/mysql stop
    # mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
    # mysql -u root mysql
    mysql> UPDATE user SET Password=PASSWO安德拉D('newpassword') where USEEnclave='root' and host='root' or host='localhost';//把空的客商密码都修改成非空的密码就行了。
    mysql> FLUSH PRIVILEGES;
    mysql> quit # /etc/init.d/mysqld restart
    # mysql -uroot -p
    Enter password: <输入新设的密码newpassword>

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    此难题是不曾开启mysqld服务.

      root 用户的 create_priv 权限是不是棉被服装置为N了?

    在创设数据库时报错
    mysql> create database haha;
    ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'haha' mysql>  
    竭泽而渔方案:那是因为在mysql的usr表中,存在客户名叫空的账户,即使登入时用的是root,可是无名氏登录。删除user.user中值为NULL的,或更新NULL为test 1)delete from user where user is NULL
    2)update user set user='test' where user is NULL

    ERROR 1044 (42000): Access denied for user 'root'@'%' to database
    自己这里root有三种深入分析登陆格局分别是:Host: bidevedw_db、Host: ::1、Host: %
    相似景观还或者有Host:127.0.0.1、Host:localhost作者的中间把哪三种删了。
    请注意 !
     注意上边每条记下的的革命字体部分Grant_priv: Y
    那几个象征,以这种形式剖析登入的root顾客,是或不是有grant权限,Y则意味有授权限给别的客商的权力,N表示一向不。
    这里恰好,就是大家要找的来头,因为作者的/my.cnf文件之中有skip-name-resolve参数,所以root都以深入分析到@'%'方式登入,于是就不曾grant_priv权限。

    化解方法:
    1、在不重启MySQL服务的情事下,只供给在报到的时候增多-h参数。
    例如:(a). /usr/local/mysql/bin/mysql -uroot -p123456 -h::1
             (b)./usr/local/mysql/bin/mysql -uroot -p123456 -h127.0.0.1
    2、必要重启MySQL。把skip-name-resolve参数去掉  ---- 还没表明。不过小编纪念,假若去掉了,日志里面会有雅量的告诫信息。小编是因为那么些警示消息,才增加的那几个参数。

    use testdb;
    简短描述表结构,字段类型:
    desc tb_content;

    翻开表生成的DDL,这些命令尽管突显起来不是太轻易看, 那个不是主题材料能够用G来结尾,使得结果轻便阅读;该命令把成立表的DDL显示出来,于是表结构、类型,外键,备注全体来得出来了。笔者相比赏识这些命令:输入轻松,彰显结果周详。
    show create table tb_content;

    查询表中列的笺注新闻
    select * from information_schema.columns where table_schema = 'testdb';
    select * from information_schema.columns where table_schema = 'testdb' and table_name = 'tb_content';

    只询问列名和注释
    select  column_name, column_comment from information_schema.columns where table_schema ='testdb'  and table_name = 'tb_content' ;

    翻开当前应用的数据库:
    mysql>select database();
    mysql>status;

    翻开远程连接:
    2, 修改 Mysql-Server 顾客配置
    mysql> USE mysql; -- 切换到 mysql DB
    Database changed
    mysql> SELECT User, Password, Host FROM user; -- 查看现成客户,密码及容许连接的主机
    ------ ---------- -----------
    | User | Password | Host      |
    ------ ---------- -----------
    | root |          | localhost |
    ------ ---------- -----------
    1 row in set (0.00 sec)
    mysql> -- 独有三个暗中认可的 root 顾客, 密码为空, 只同意 localhost 连接
    12
    mysql> -- 上边大家别的增添贰个新的 root 顾客, 密码为空, 只同意 192.168.1.100 连接
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100' IDENTIFIED BY '' WITH GRANT OPTION;
    mysql> -- @'192.168.1.100'能够轮换为@‘%’就可任意ip访谈,当然我们也得以平昔用 UPDATE 更新 root 顾客 Host, 但不推荐, SQL如下:
    mysql> -- UPDATE user SET Host='192.168.1.100' WHERE User='root' AND Host='localhost' LIMIT 1;
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

     
    修改root密码
    mysql> use mysql
    Database changed
    mysql> update user set password=PASSWORD('123456') where user='root';
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 1  Changed: 0  Warnings: 0
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)

    查看全部顾客密码:
    SELECT User, Password, Host FROM user;

    windows加多防火墙端口:
    新葡亰496net:mysql的多少个知识点,数据库优化学习笔记。.须要设置防火墙放手mysql 3306端口的拜候,调控面板->windows防火墙->高等设置,张开另二个分界面,
      在该分界面中选拔入站法则,然后在左边栏选用新建准绳,下一步选用端口,下一步接纳TCP/特定地点端口并输入3306,下一步选择允许连接,下一步暗许选项,下一步输入你想给的称呼举例mysqlport,然后点击完毕。
    开垦防火墙,选用差别选项卡,加多端口
    名称:mysqlport
    端口号:3306
    选中TCP
      设置好后,务必重新启航计算机

    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
    开辟防火墙配置文件可查阅当前防火墙情况:vi  /etc/sysconfig/iptables
    iptables-save
    sudo service iptables save
    iptables-save, service iptables save 成效同样,只可是iptables-save须求手动钦命路线及文件名,而service iptables save的文件为/etc/sysconfig/iptables
    只顾:扩充的开放3306端口的语句必须要在icmp-host-prohibited在此之前

    怎么着远程访谈MySQL数据库设置权限方法总计,研讨访问单个数据库,全体数据库,内定客商访谈,设置访谈密码,内定访谈主机。
    1,设置访问单个数据库权限
    mysql>grant all privileges on test.* to 'root'@'%';
    注脚:设置顾客名字为root,密码为空,可访谈数据库test

    2,设置访谈全体数据库权限
    mysql>grant all privileges on *.* to 'root'@'%';
    表明:设置客户名字为root,密码为空,可访谈具备数据库*

    3,设置钦命客户名访谈权限
    mysql>grant all privileges on *.* to 'liuhui'@'%';
    表明:设置钦命客商名称叫liuhui,密码为空,可访谈具备数据库*

    4,设置密码访谈权限
    mysql>grant all privileges on *.* to 'liuhui'@'%' IDENTIFIED BY 'liuhui';
    评释:设置内定客商名称为liuhui,密码为liuhui,可访问具备数据库*

    5,设置钦定可访谈主机权限
    mysql>grant all privileges on *.* to 'liuhui'@'10.2.1.11';
    注解:设置内定客商名称为liuhui,可访谈拥有数据库*,独有10.2.1.11那台机器有权力访谈
    还足以设置钦命访谈有个别数据库下的有些数据表,请继续关切MySQL基础知识体系。

     

     

     

    CREATE TABLE tab2 AS (SELECT * FROM tab1)
    这种做法表的储存引擎也会选用服务器默许的囤积引擎实际不是源表的仓库储存引擎,此种复制方法把表的剧情也三只复制过来了。

    CREATE TALBE tab2 ENGINE=MYISAM, CHARSET='UTF8' AS (SELECT * FROM tab1)
    可以和煦内定期存款款和储蓄引擎和字符集,弥补方法意气风发的不足

    CREATE TABLE tab2 LIKE tab1
    应用和tab1表同样的构造来成立三个新表,列名、数据类型、空指和目录也将复制,但是表的内容不会被复制。外键和专项使用的权限也从未被复制。

    MySQL复制表结构及数码到新表
    CREATE TABLE tab_new SELECT * FROM tab_old

    复制旧表的数目到新表(倘使三个表结构一样)
    INSERT INTO tab1 SELECT * FROM tab2

    复制旧表的多少到新表(要是五个表结构不平等)
    INSERT INTO tab1(字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM tab2

    转移表名
    ALTER TABLE employee RENAME TO staff

    更换列类型
    ALTER TABLE employee MODIFY COLUMN truename VARCHAR(10) NOT NULL DEFAULT ''

    更改列名
    ALTER TABLE employee CHANGE COLUMN truename employeename VARCHAR(10) NOT NULL DEFAULT ''

    增添暗中同意值
    ALTER TABLE employee ALTER COLUMN truename SET DEFAULT ''

    删除默许值
    ALTER TABLE employee ALTER COLUMN truename DEOP DEFAULT

    mysql修改表
    表的布局如下:

    mysql> show create table person;
    | person | CREATE TABLE `person` (
    `number` int(11) DEFAULT NULL,
    `name` varchar(255) DEFAULT NULL,
    `birthday` date DEFAULT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
    删除列:

    ALTER TABLE person DROP COLUMN birthday;
    添加列:

    ALTER TABLE person ADD COLUMN birthday datetime;
    修改列,把number修改为bigint:

    ALTER TABLE person MODIFY number BIGINT NOT NULL;
    抑或是把number修改为id,类型为bigint:

    ALTER TABLE person CHANGE number id BIGINT;

    增进主键:

    ALTER TABLE person ADD PRIMARY KEY (id);
    去除主键:

    ALTER TABLE person DROP PRIMARY KEY;
    增加独一索引:

    ALTER TABLE person ADD UNIQUE name_unique_index (`name`);
    为name这一列创设了独一索引,索引的名字是name_unique_index.

     

    加多普通索引:

    ALTER TABLE person ADD INDEX birthday_index (`birthday`);

    剔除索引:

    ALTER TABLE person DROP INDEX birthday_index;
    ALTER TABLE person DROP INDEX name_unique_index;

    剥夺非唯一索引

    ALTER TABLE person DISABLE KEYS;
    ALTE奥德赛 TABLE...DISABLE KEYS让MySQL截止更新MyISAM表中的非独一索引。

    激活非独一索引

    ALTER TABLE person ENABLE KEYS;
    ALTEEvoque TABLE ... ENABLE KEYS重新创立错失的目录。

     

    把表暗许的字符集和有着字符列(CHA奥迪Q7, VARCHALX570, TEXT)改为新的字符集:

    ALTER TABLE person CONVERT TO CHARACTER SET utf8;
    修改表某一列的编码

    ALTER TABLE person CHANGE name name varchar(255) CHARACTER SET utf8;
    单独转移二个表的暗许字符集

    ALTER TABLE person DEFAULT CHARACTER SET utf8;
    修改表名

    RENAME TABLE person TO person_other;
    移步表到其余数据库

    RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

     

    在mysql中我们对数码表字段的修改命令只要选择alter就足以了,下边作者来给大家详细介绍mysql中期维修改表字段名/字段长度/字段类型等等一些办法介绍,有须要掌握的意中人可参照他事他说加以考察。

    先来看看常用的措施
    MySql的简短语法,常用,却不易于记住。当然,这一个Sql语法在各数据库中挑宛城通用。下边列出:
    1.充实三个字段
    alter table user add COLUMN new1 VARCHA瑞鹰(20) DEFAULT NULL; //扩展多个字段,默感到空
    alter table user add COLUMN new2 VARCHARAV4(20) NOT NULL;    //扩展三个字段,暗许无法为空
    2.删减叁个字段
    alter table user DROP COLUMN new2;                //删除一个字段
    3.修改贰个字段
    alter table user MODIFY new1 VARCHATiggo(10);            //修改三个字段的档案的次序
    alter table user CHANGE COLUMN new1 new4 varchar(512) default "";              //修改八个字段的称号,此时一定要再一次钦命该字段的门类

    //主键
    alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
    //扩充二个新列
    alter table t2 add d timestamp;
    alter table infos add ex tinyint not null default ‘0′;
    //删除列
    alter table t2 drop column c;
    //重命名列
    alter table t1 change a b integer;
    //改换列的体系
    alter table t1 change b b bigint not null;
    alter table infos change list list tinyint not null default ‘0′;
    //重命名表
    alter table t1 rename t2;
    加索引
    mysql> alter table tablename change depno depno int(5) not null;
    mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
    mysql> alter table tablename add index emp_name (name);
    加主关键字的目录
    mysql> alter table tablename add primary key(id);
    加唯意气风发限制规范的目录
    mysql> alter table tablename add unique emp_name2(cardnumber);
    去除某些索引
    mysql>alter table tablename drop index emp_name;
    日增字段:
    mysql> ALTER TABLE table_name ADD field_name field_type;
    修改原字段名称及项目:
    mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
    去除字段:
    mysql> ALTER TABLE table_name DROP field_name;
    mysql修改字段长度
    alter table 表名 modify column 字段名 类型;
    例如
    数据库中user表 name字段是varchar(30)
    可以用
    alter table user modify column name varchar(50) ;

     

     

     

     

    mysql改动表结构:加多、删除、修改字段、调治字段顺序
    mysqltablenulluserlist
    加多字段:

    alter table `user_movement_log`
    Add column GatewayId int not null default 0 AFTER `Regionid` (在哪个字段后边增添)

    删除字段:

    alter table `user_movement_log` drop column Gatewayid

    调动字段顺序:

    ALTER TABLE `user_movement_log` CHANGE `GatewayId` `GatewayId` int not null default 0 AFTER RegionID

    //主键

    alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);

    //扩大三个新列

    alter table t2 add d timestamp;
    alter table infos add ex tinyint not null default '0';

    //删除列

    alter table t2 drop column c;

    //重命名列

    alter table t1 change a b integer;

    //改动列的种类

    alter table t1 change b b bigint not null;
    alter table infos change list list tinyint not null default '0';

    //重命名表

    alter table t1 rename t2;

    加索引

    mysql> alter table tablename change depno depno int(5) not null;
    mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
    mysql> alter table tablename add index emp_name (name);

    加主关键字的目录

    mysql> alter table tablename add primary key(id);

    加唯风流洒脱限制规范的目录

    mysql> alter table tablename add unique emp_name2(cardnumber);

    去除有个别索引

    mysql>alter table tablename drop index emp_name;

    修改表:

    日增字段:

    mysql> ALTER TABLE table_name ADD field_name field_type;

    修改原字段名称及项目:

    mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;

    除去字段:

    mysql> ALTER TABLE table_name DROP field_name;

     

     

     

     

     

    MySql表结构修改详解

    修改表的语法

    增加列[add 列名]

    ①alter table 表名 add 列名 列类型 列参数【加的列在表的末梢面】
    例:alter table test add username char(20) not null default '';
    alter table test add birth date not null default '0000-00-00';

    ②alter table 表名 add 列名 列类型 列参数 after 某列【把新列加在某列前边】
    例:alter table test add gender char(1) not null default '' after username;

    ③alter table 表名 add 列名 列类型 列参数 first【把新列加在最前方】
    例:alter table test add pid int not null default 0 first;

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

    删除列[drop 列名]

    ①alter table 表名 drop 列名
    例:alter table test drop pid;

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

    修改列[modife 列名]

    ①alter table 表名 modify 列名 新品类 新参数【修改列类型】
    例:alter table test modify gender char(4) not null default '';
    ②alter table 表名 change 旧列名 新列名 新类型 新参数【修改列名和列类型】
    例:alter table test change pid uid int unsigned not null default 0;

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

    查询列

    ①desc 表名【查询全体列】
    例: desc test;
    mysql> desc department;
    ------- ------------- ------ ----- --------- -------
    | Field | Type | Null | Key | Default | Extra |
    ------- ------------- ------ ----- --------- -------
    | dId | int(11) | NO | PRI | | |
    | dName | varchar(32) | YES | | NULL | |
    ------- ------------- ------ ----- --------- -------

    ②show columns from 表名【效果和desc一样】
    mysql> show columns from department;
    ------- ------------- ------ ----- --------- -------
    | Field | Type | Null | Key | Default | Extra |
    ------- ------------- ------ ----- --------- -------
    | dId | int(11) | NO | PRI | | |
    | dName | varchar(32) | YES | | NULL | |
    ------- ------------- ------ ----- --------- -------

    ③show create table 表名【查看表的开创代码】
    mysql> show create table department;
    CREATE TABLE `department` (
    `dId` int(11) NOT NULL,
    `dName` varchar(32) DEFAULT NULL,
    PRIMARY KEY (`dId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

     

    小结一下对mysql表结构的修改操作,包含对字段及索引的修改操作: 增添字段: alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid` (在哪个字段前边增多) 删除字段: alter table `user_movement_log` drop column Gatewayid 调节字段顺序: ALTECRUISER TABLE `user_movement_log` CHANGE `GatewayId` `GatewayId` int not null default 0 AFTER RegionID //主键 alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id); //扩充叁个新列 alter table t2 add new田野 timestamp; (轻巧语法,只钦点新增字段new田野同志 类型为timestamp) alter table infos add new田野(field) tinyint not null default '0'; (同有的时候间钦定字段null属性、暗中认可值) //删除列 alter table t2 drop column c; (删除列c) //重命名列 alter table t1 change a b integer; (把列a改名称为b,注意要钦定列类型) //更改列的门类 alter table t1 change b b bigint not null; (把列a改名称为b,钦命列类型及null属性) alter table infos change list list tinyint not null default '0'; //重命名表 alter table t1 rename t2; 加索引 mysql> alter table tablename change depno depno int(5) not null; mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]); mysql> alter table tablename add index emp_name (name); 加主关键字的索引 mysql> alter table tablename add primary key(id); 加唯意气风发限制规范的索引 mysql> alter table tablename add unique emp_name2(cardnumber); 删除某些索引 mysql>alter table tablename drop index emp_name; 修改表: 扩张字段: mysql> ALTER TABLE table_name ADD field_name field_type; 修改原字段名称及项目: mysql> ALTE哈弗 TABLE table_name CHANGE old_field_name new_field_name field_type; 删除字段: mysql> ALTE帕杰罗 TABLE table_name DROP field_name;

    ORDER BY _column1, _column2; /* _column1升序,_column2升序 */
    ORDER BY _column1, _column2 DESC; /* _column1升序,_column2降序 */
    ORDER BY _column1 DESC, _column2 ; /* _column1降序,_column2升序 */
    ORDER BY _column1 DESC, _column2 DESC; /* _column1降序,_column2降序 */
    用 DESC 表示按倒序排序(即:从大到小排序)
    用 ACS 表示按正序排序(即:从小到大排序)

     

    order应该是以汉字的 ASCII 码排序,下面是安分守纪汉字拼音排序
    select * from corp_data where Chengshi like "图木舒克" order by convert(name using gbk);

    #select count(*) as count from corp_data where Chengshi like "图木舒克";
    select * from corp_data where Chengshi like "图木舒克" order by convert(name using gbk);
    #delete from corp_data where Chengshi like "图木舒克";
    #desc corp_data;
    #alter table corp_data modify column hangye varchar(100) ;
    #alter table corp_data modify column jianjie varchar(10000) ;

     

     

     

     

     

    mysql怎么样查询最新的5条数据
    select * from tb_content where id=(select msx(id) from tb_content) limit 0,5;

    jdbcTemplate.execute("CREATE
    建数据库不对路,要手动drop database ,再create database.

    查总数:
    select count(*) as count from tb_content;
    select count(id) as count from tb_content;
    navicat->深入分析表->获得表的总的数量

    select * from corp_data where Chengshi like "上海";
    select * from corp_data where Shengzhixiashi like "河南";

    select name ,count(distinct(url)) from corp_data group by  name;
    select Chengshi ,count(distinct(url)) from corp_data group by  Chengshi;
    select Chengshi ,count(*) from corp_data group by  Chengshi;
    select count(*) from corp_data where Chengshi like "北京";
    select * from corp_data where Chengshi like "北京";
    select name ,url  from corp_data limit 1;
    select *  from corp_data limit 1;

    select *  from corp_data limit 10;

    select count(*) as count from corp_data limit 10;
    select count(distinct(name)) as count from corp_data;

     varchar(N),  这里的N是指字符数,并不是字节数.占用的字节数与编码有关
    utf-8, 多少个汉字3字节 意大利共和国语字母1字节

    CREATE TABLE IF NOT EXISTS corp_url_all_20150909 (id int(11) NOT NULL AUTO_INCREMENT,url varchar(500),PRIMARY KEY (id))
    insert into corp_url_all_20150909 select * from corp_url_all;

     

    备份:

    mysql> create table corp_url_all_20150909 select * from corp_url_all;
    Query OK, 3186326 rows affected (1 min 14.19 sec)
    Records: 3186326  Duplicates: 0  Warnings: 0
    mysql> select count(distinct(url)) as count from corp_url_all_20150909;
    --------
    | count  |
    --------
    | 357399 |
    --------
    1 row in set (11.21 sec)

    去重:

    create table corp_url_all_single select distinct(url) from corp_url_all_20150909;
    select count(distinct(url)) as count from corp_url_all_single;

     

     

     

     

     

    基本的SQL语句

    二、数据定义语言(DDL)

    数据定义语言:Data Definition Language。如CREATE, DROP,ALTE君越等说话。供给在乎的是,数据库中的命令不区分抑扬顿挫写

    建数据库,命名称叫mydb:

    CREATE DATABASE mydb; 
    

    注:假如要删除数据库,将“create”改为“drop”就能够。

    创建三个名称为teacher的表:

    新葡亰496net 4

    CREATE TABLE teacher(
    id int primary key auto_increment,
    name varchar(20),
    gender char(1),
    age int(2),
    birth date,
    description varchar(100)
    );
    

    新葡亰496net 5

    查看表结构:

    desc teacher; 
    

    须求小心的是:主键是用来唯少年老成象征一条记下的字段(主键值必得是并世无两)

    修改表结构(ALTER TABLE语句):(假使表名字为test)

    • alter table test add column job varchar(10); --加多表列
    • alter table test rename test1; --修改表名
    • alter table test drop column name; --删除表列
    • alter table test modify address char(10) --修改表列类型(改类型)
    • alter table test change address address1  char(40) --修改表列类型(改名字和项目,和底下的生机勃勃行效果等同)
    • alter table test change column address address1 varchar(30)--修改表列名(改名字和项目)

    电动增加

    alter table tab_teacher change id id int auto_increment;

     

    日增数据

    insert into tab_teacher(name,gender,age,createDate) values('smyh','b',22,now()); 
    

    now()函数能够调出当前系统的时刻。

     

    修改数据(UPDATE … SET语句):

    UPDATE 表名 SET 字段1名=值,字段2名=值,字段3名=值 where 字段名=值; 
    

    注:where后边的部分代表修改的口径。修改时,根据字段1、字段2、字段3的前后相继顺序修改。

     

    删去数据

    DELETE FROM 表名; 
    

     

    删除ID为1的记录:

    DELETE FROM 表名 where id=1; 
    

     

    四、数据查询语言(D奇骏L):

    多少查询语言(Data Retrieval Language --D陆风X8L):SELECT语句。

    在实际上开拓中,数据查询语言用的是最多的。注:实际支付中,要防止选用通配符"*"(通配符代表全体字段),因为系统要先深入分析出全数的字段名,将其还原为真实的名字,然后再张开操作。假如记录数据库内容非常多,会影响作用。

    询问全体音信:

    select id,name,gender,age,job,createDate from tab_teacher; 
    

     

    在并未有表被援引的景色下,允许内定DUAL作为一个假的表名:

    DUAL是虚构表。也正是说,表中绝非那么些数据,可是要正是使用sql语句,系统就会用这些设想表来知足你。比如效果如下:

    新葡亰496net 6

    询问ID为2的园丁消息:

    select * from tab_teacher where id=2; 
    

     

    询问专门的学问为空的教师职员和工人消息:

    select * from tab_teacher where job is null;#字段为空用“job is null”来表示,而不是“job=null”。
    

     

    询问ID为2的教授的姓名和性别:

    select name,gender from tab_teacher where id=2; 
    

     

    查询性别为女和内定日期的教员信息:

    select $ from tab_teacher where gender='w' and ceateDate='2014-10-14'; #并且用“and”,或用“or”。
    

     

    询问性别为男依旧ID小于2的良师:

    select * from tab_teacher where gender='m' or id<2; 
    

     

    询问姓名的末段一个字符为“e”的导师:(关键字:like '% 钦命字符')

    select * from tab_teacher where name like '%e'; 
    

     

    询问姓名以钦点字符开始的先生:

    select * from tab_teacher where name like 's%'; 
    

     

    查询姓名中蕴藏“m”的民间兴办助教:

    select * from tab_teacher where name like '%m%'; 
    

     

    询问全体老师消息,并按日期降序可能升序排列:(O奥迪Q5DER BY 字段, 默以为升序:ASC/降序:DESC

    • 升序:

      select * from tab_teacher order by createDate; #最终贰个单词ASC可写可不写,因为默认为升序

     

    • 降序:

      select * from tab_teacher order by createDate desc; 

     

    八个排序条件:(当第贰个尺码一样期,依据第贰个规范化排序)

    诸如:上边图片的排序中,是服从日期降序排序的,可是id为2和id为3的日期同样,这两条记下依照暗中认可顺序排序。

    举个例子来说:未来排序的第大器晚成规格为:日期降序,第二口径为:年龄降序。八个排序条件用逗号隔离。命令为:

    select * from tab_teacher order by createDate desc,age desc;
    

     

    按性别分组查询男女教授的人口(GROUP BY ):

    select gender,count(gender) from tab_teacher group by gender;
    

    地点的指令表示,查找gender那个字段;并计算gender有多少个(count(gender));然后遵照gender里的剧情将个数实行分组(group by gender)。

    标题:笔者以为应该是先分组,再查询性别,再数性其余个数。

    注:那之中用到了count()那一个放手的函数。关于count()那几个聚合函数,将要下如日中天篇文章中讲到。

    不错的意义和不当的意义如下:

    新葡亰496net 7

    按性别分组,查询出女导师人数的总额:

    select gender,count(gender) from tab_teacher group by gender having gender='m';
    

    此处在上多少个限令的功底上,增添了三个要害字:having。having关键字特别用来在分组之后加上的规范。意思是:先求总量,然后开展分组,然后再从分组里找到字段等于“m”的个数。注:不能够用where作为注重字,因为where是加在分组此前的口径。

    展现效果如下:

    新葡亰496net 8

    注:这种写法操作繁琐,成效十分的低,having语句尽量少用,能够用任何语句替代,比如:

    select gender,count(gender) from tab_teacher where gender='m';
    

    功能是一模二样的。

    查询表的总记录数:

    • 方式一:(不推荐)

      select count(*) from tab_teacher;

    • 主意二:(使用主键的不二等秘书技查询)

      select count(id) from tab_teacher;

    措施龙腾虎跃将空记录也隐含进来了。所以选取方法二,因为主键唯旭日东升,且无法为空,此时id总数则意味着总记录数。

    别名的用法:

    • 使用别称查询表的总记录数:

      select count(id) as counts from tab_teacher; 

    不用别称和用小名的功能比较方下:(命令中的"as"能够大约)

    新葡亰496net 9

    • 采纳外号来替代表的名字:

    比方来讲:将表的名字起为t。

    select t.name,t.age from tab_teacher t;
    

    新葡亰496net 10

    当表名比较长,可能同不平日候有多少个表存在时,用别称就展现特别便于了。

    询问先生记录的前三条(从0地方上马寻觅3条):(特别实用)

    select * from tab_teacher limit 0,3;
    

    指令解释:limit前面有八个参数:首个参数是开场地点,第一个参数是偏移量。证明:第一条记下的id不管为多少,索引地方都是0。

    注:这种分页查询办法充裕有用,比方利用百度找出时,告诉你总记录数,不过会分页呈现。

     

    五、事务调控语言(TCL):

    政工调节语言:Transaction Control Language--TCL。如COMMIT,ROLLBACK语句。

    1、事务:

    事务(Transaction)的概念:事情(Transaction)是走访并可能更新数据库中各类数据项的二个程序施行单元(unit)。在关周全据库中,多少个职业能够是一条SQL语句,大器晚成组SQL语句或任何程序。

    事情的性质:原子性(atomicity)、豆蔻梢头致性(consistency)、隔开性(isolation)、持续性(durability)。那多个属性温时称为ACID天性。

    政工的特性:事务便是对数据库的多步操作,要么一齐成功,要么一同败北。

    总结:事务正是能够把多步操作看成四个完完全全,那些欧洲经济共同体照旧一同成功,要么一齐失利。

    2、事务的交给和回滚命令:

    安装暗中同意事务提交方式:(默认为true)

    • 安装职业提交方式为“手动提交”:

      set autocommit = false;

    • 安装专门的工作提交方式为“电动提交”:

      set autocommit = true;

    手动提交业务:

    commit;
    

    回滚事务:

    rollback;
    

     

    注:只要还没手动commit提交,黄金时代旦回滚,此前的修改操作都将清零。

    注:commit命令和rollback命令唯有在付出格局为“手动提交”时,才足以用。

    3、保存还原点的命令:

    当数码未commit以前,增加和删除改查的操作都以有的时候保存在内部存款和储蓄器之中的,当大家修改操作进行到某一步时,能够给这一步设置三个还原点,方便现在回滚到此还原点(类似于PS个中的快速照相)。

    封存还原点:

    savepoint name_point;
    

    回滚到钦点还原点:

    rollback to name_point;
    

     

     

     

     

     九、MySQL的局地函数:
      1、字符串链接——CONCAT()
        >SELECT CONCAT(name,'=>',score) FROM tb_name

      2、数学函数:
        AVG、SUM、MAX、MIN、COUNT;

      3、文本管理函数:
        TRIM、LOCATE、UPPER、LOWER、SUBSTRING

      4、运算符:
         、-、*、

      5、时间函数:
        DATE()、CURTIME()、DAY()、YEAR()、NOW().....

     十、分组查询:
       1、分组查询能够根据钦点的列举行分组:
        >SELECT COUNT(*) FROM tb_name GROUP BY score HAVING COUNT(*)>1;
      2、条件使用Having;
      3、ORDER BY 排序:
        O奥迪Q7DETiggo BY DESC|ASC    =>按数据的降序和升序排列

    十意气风发、UNION准绳——能够举办三个语句(能够去除重复行)
     十二、全文检索——MATCH和AGAINST
      1、SELECT MATCH(note_text)AGAINST('PICASO') FROM tb_name;
      2、InnoDB引擎不援助全文字笔迹核准索,MyISAM能够;

     十三、视图

      1、创设视图

        >CREATE VIEW name AS SELECT * FROM tb_name WHERE ~~ ORDER BY ~~;

      2、视图的特殊效用:

          a、简化表之间的拜见(把联结写在select中);

          b、重新格式化输出检索的多少(TGL450IM,CONCAT等函数);

          c、过滤不想要的数目(select部分)

          d、使用视图计算字段值,如聚焦那样的值。

     十四、使用存款和储蓄进度:

      个人知道,存款和储蓄过程便是二个自定义函数,有局部变量参数,可传唱参数,能够再次来到值,可是这语法够呆笨的~~~

      1、创制存款和储蓄进程:

        >CREATE PROCEDURE pro(

        >IN num INT,OUT total INT)

        >BEGIN

        >SELECT SUM(score) INTO total FROM tb_name WHERE id=num;

        >END;

       ***此间的  IN (传递贰个值给存款和储蓄进度),OUT(从存款和储蓄进度传出三个值),INOUT(对存款和储蓄进度传入、传出),INTO(保存变量)

      2、调用存款和储蓄过程:

        >CALL pro(13,@total)      //这里的累积进度四个变量,七个是IN贰个是OUT,这里的OUT也是内需写上的,不写会出错

        >SELECT @total         //这里就足以看看结果了;

      3、存款和储蓄进程的其他操作:

        >SHOW PROCEDURE STATUS;      //展现当期的仓库储存进程

        >DROP PROCEDURE pro;         //删除钦命期存款款和储蓄进程

    十五、使用游标:

      对这一个掌握不是很懂,朋友多多指导哦~~~

       1、游标的操作

        >CREATE PROCEDURE pro()

        >BEGIN

        >DECLARE ordername CURSOR FOR

        >SELECT order_num FROM orders;

        >END;

        

        >OPEN ordername;    //打开游标

     

        >CLOSE ordername;    //关闭游标

    十六、触发器:

      触发器是指在张开某项钦赐操作时,触发触发器内钦定的操作;

      1、协理触发器的语句有DELETE、INSERT、UPDATE,其余均不扶植

      2、创设触发器:

        >CREATE TRIGGER trig AFTER INSERT ON ORDERS FOR EACH ROW SELECT NEW.orser_name;

        >INSERT语句,触发语句,再次来到二个值

      3、删除触发器

        >DROP TRIGGER trig;

    十七、语法整理:

      1、ALTER TABLE(修改表)

        ALTER TABLE table_name

        (  ADD    column  datatype    [ NULL | NOT NULL ]  [ CONSTRAINTS ]

           CHANGE  column   datatype   COLUMNS  [ NULL | NOT NULL ]   [ CONSTRAINTS ]

           DROP    column,

           。。。。

        )

      2、COMMIT(处监护人务)

        >COMMIT;

       3、CREATE INDEX(在二个或几个列上成立索引)

        CREATE INDEX index_name ON tb_name (column [ ASC | DESC ] , .......);

       4、CREATE PROCEDURE (成立存款和储蓄进度)

        CREATE PROCEDURE pro([ parameters ])

        BEGIN

        ........

        END

       5、CREATE TABLE(创建表)

        CREATE TABLE tb_name(

        column_name  datetype  [ NULL | NOT NULL ]   [ condtraints]   ,

        column_name  datetype  [ NULL | NOT NULL ]   [ condtraints]   ,

        .......

        PRIMARY KEY( column_name )

        )ENGINE=[  InnoDB | MyiSAM ]DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

       6、CREATE USEEnclave(创设客户)

        CREATE USER user_name [ @hostname ] [ IDENTIFIED BY [ PASSWORD ] 'pass_word' ];

       7、CREATE VIEW (在三个或五个表上创设视图)

        CREATE [ OR REPLACE ] VIEW view_name AS SELECT。。。。。。

       8、DELETE (从表中删除精神感奋行或多行)

        DELETE FROM table_name [WHERE ......]

       9、DROP(永恒删除数据库及对象,如视图、索引等)

        DROP DATEBASE | INDEX | PROCEDURE | TABLE | TRIGGER | USER | VIEW  name

       10、INSERT (给表加多行)

        INSERT INTO tb_name [ ( columns,...... ) ]  VALUES(value1,............);

        使用SELECT值插入:

        INSERT INTO tb_name [ ( columns,...... ) ]

        SELECT columns , .......   FROM tb_name [ WHERE ...... ] ;

       11、ROLLBACK(裁撤贰个事务管理块)

        ROLLBACK [  TO  savapointname  ];

       12、SAVEPOINT(为ROLLBACK设置保留点)

        SAVEPOINT sp1;

       13、SELECT (检索数据,彰显讯息)

        SELECT column_name,.....FROM tb_name  [ WHERE ]   [ UNION ]    [ RROUP BY ]   [ HAVING ]   [ ORDER BY ]

       14、START TRANSACTION (贰个新的事务管理块的上马)

        START TRANSACTION

       15、UPDATE(更新一个表中的生机勃勃行或多行)

        UPDATE tb_name SET column=value,......[ where ]

     

    此外mysql基本操作:

    多少个最常用的api函数
    mysql_affected_rows()     再次回到被新式的UPDATE, DELETE或INSERT查询影响的行数。
    mysql_close()     关闭四个服务器连接。
    mysql_errno()     重回方今被调用的MySQL函数的出错编号。
    mysql_error()     重返近日被调用的MySQL函数的失误音讯。
    mysql_fetch_row()     从结果群集中获取下意气风发行。
    mysql_field_count()     重回这两天询问的结果列的数量。
    mysql_init()     获得或起头化四个MYSQL结构。
    mysql_insert_id()     再次来到有前二个询问为二个AUTO_INCREMENT列生成的ID。
    mysql_num_rows()     再次来到叁个结果会集中的行的多少。
    mysql_query()     推行钦命为四个空结尾的字符串的SQL查询。
    mysql_real_connect()     连接一个MySQL服务器。
    mysql_real_query()     实施钦点为带计数的字符串的SQL查询。

    mysql常用字符串操作函数大全,以至实例

    CREATE TABLE tab2 AS (SELECT * FROM tab1)
    这种做法表的存款和储蓄引擎也会采纳服务器暗中同意的蕴藏引擎而不是源表的蕴藏引擎,此种复制方法把表的内容也共同复制过来了。

    CREATE TALBE tab2 ENGINE=MYISAM, CHARSET='UTF8' AS (SELECT * FROM tab1)
    能够友善钦点期存款款和储蓄引擎和字符集,弥补方法风度翩翩的欠缺

    CREATE TABLE tab2 LIKE tab1
    行使和tab1表相同的组织来创建二个新表,列名、数据类型、空指和目录也将复制,不过表的剧情不会被复制。外键和专用的权能也一直不被复制。

    MySQL复制表结构及数据到新表
    CREATE TABLE tab_new SELECT * FROM tab_old

    复制旧表的数额到新表(倘若八个表结构同样)
    INSERT INTO tab1 SELECT * FROM tab2

    复制旧表的数据到新表(假诺四个表结构分化)
    INSERT INTO tab1(字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM tab2

    退换表名
    ALTER TABLE employee RENAME TO staff

    改换列类型
    ALTER TABLE employee MODIFY COLUMN truename VARCHAR(10) NOT NULL DEFAULT ''

    变动列名
    ALTER TABLE employee CHANGE COLUMN truename employeename VARCHAR(10) NOT NULL DEFAULT ''

    增添暗中认可值
    ALTER TABLE employee ALTER COLUMN truename SET DEFAULT ''

    删除暗中认可值
    ALTER TABLE employee ALTER COLUMN truename DEOP DEFAULT

    mysql修改表
    表的布局如下:

    mysql> show create table person;
    | person | CREATE TABLE `person` (
    `number` int(11) DEFAULT NULL,
    `name` varchar(255) DEFAULT NULL,
    `birthday` date DEFAULT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
    删除列:

    ALTER TABLE person DROP COLUMN birthday; 
    添加列:

    ALTER TABLE person ADD COLUMN birthday datetime;
    修改列,把number修改为bigint:

    ALTER TABLE person MODIFY number BIGINT NOT NULL;
    抑或是把number修改为id,类型为bigint:

    ALTER TABLE person CHANGE number id BIGINT;

    增加主键:

    ALTER TABLE person ADD PRIMARY KEY (id);
    去除主键:

    ALTER TABLE person DROP PRIMARY KEY;
    增添独一索引:

    ALTER TABLE person ADD UNIQUE name_unique_index (`name`);
    为name这一列创造了独一索引,索引的名字是name_unique_index.

     

    增添普通索引:

    ALTER TABLE person ADD INDEX birthday_index (`birthday`);

    剔除索引:

    ALTER TABLE person DROP INDEX birthday_index;
    ALTER TABLE person DROP INDEX name_unique_index;

    剥夺非独一索引

    ALTER TABLE person DISABLE KEYS;
    ALTE奥迪Q5 TABLE...DISABLE KEYS让MySQL甘休更新MyISAM表中的非独一索引。

    激活非独一索引

    ALTER TABLE person ENABLE KEYS;
    ALTEHighlander TABLE ... ENABLE KEYS重新创造错失的目录。

     

    把表暗中认可的字符集和具有字符列(CHAQX56, VARCHA中华V, TEXT)改为新的字符集:

    ALTER TABLE person CONVERT TO CHARACTER SET utf8;
    修改表某一列的编码

    ALTER TABLE person CHANGE name name varchar(255) CHARACTER SET utf8;
    独有转移叁个表的暗中同意字符集

    ALTER TABLE person DEFAULT CHARACTER SET utf8;
    修改表名

    RENAME TABLE person TO person_other;
    活动表到另外数据库

    RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

     

    在mysql中大家对数码表字段的更改命令只要利用alter就足以了,下边小编来给我们详细介绍mysql中期维修改表字段名/字段长度/字段类型等等一些艺术介绍,有须求掌握的相爱的人可参谋。

    先来探视常用的情势
    MySql的简约语法,常用,却不便于记住。当然,这个Sql语法在各数据库中基本通用。上边列出:
    1.扩展多个字段
    alter table user add COLUMN new1 VARCHAEnclave(20) DEFAULT NULL; //扩充四个字段,默感觉空
    alter table user add COLUMN new2 VARCHACRUISER(20) NOT NULL;    //扩展四个字段,暗许无法为空
    2.刨除贰个字段
    alter table user DROP COLUMN new2;                //删除一个字段
    3.更换二个字段
    alter table user MODIFY new1 VARCHA讴歌RDX(10);            //修改三个字段的种类
    alter table user CHANGE new1 new4 int;              //修改两个字段的称谓,此时肯定要重新

    //主键
    alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
    //增添七个新列
    alter table t2 add d timestamp;
    alter table infos add ex tinyint not null default ‘0′;
    //删除列
    alter table t2 drop column c;
    //重命名列
    alter table t1 change a b integer;
    //退换列的品类
    alter table t1 change b b bigint not null;
    alter table infos change list list tinyint not null default ‘0′;
    //重命名表
    alter table t1 rename t2;
    加索引
    mysql> alter table tablename change depno depno int(5) not null;
    mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
    mysql> alter table tablename add index emp_name (name);
    加主关键字的目录
    mysql> alter table tablename add primary key(id);
    加唯龙马精神限制规范的目录
    mysql> alter table tablename add unique emp_name2(cardnumber);
    除去有些索引
    mysql>alter table tablename drop index emp_name;
    扩张字段:
    mysql> ALTER TABLE table_name ADD field_name field_type;
    修改原字段名称及项目:
    mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
    除去字段:
    mysql> ALTER TABLE table_name DROP field_name;
    mysql修改字段长度
    alter table 表名 modify column 字段名 类型;
    例如
    数据库中user表 name字段是varchar(30)
    可以用
    alter table user modify column name varchar(50) ;

     

     

     

     

    mysql改换表结构:增多、删除、修改字段、调解字段顺序
    mysqltablenulluserlist
    增多字段:

    alter table `user_movement_log`
    Add column GatewayId int not null default 0 AFTER `Regionid` (在哪些字段前面增加)

    去除字段:

    alter table `user_movement_log` drop column Gatewayid

    调动字段顺序:

    ALTER TABLE `user_movement_log` CHANGE `GatewayId` `GatewayId` int not null default 0 AFTER RegionID

    //主键

    alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);

    //扩展三个新列

    alter table t2 add d timestamp;
    alter table infos add ex tinyint not null default '0';

    //删除列

    alter table t2 drop column c;

    //重命名列

    alter table t1 change a b integer;

    //改造列的档案的次序

    alter table t1 change b b bigint not null;
    alter table infos change list list tinyint not null default '0';

    //重命名表

    alter table t1 rename t2;

    加索引

    mysql> alter table tablename change depno depno int(5) not null;
    mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
    mysql> alter table tablename add index emp_name (name);

    加主关键字的目录

    mysql> alter table tablename add primary key(id);

    加唯风流倜傥限制条件的目录

    mysql> alter table tablename add unique emp_name2(cardnumber);

    剔除有个别索引

    mysql>alter table tablename drop index emp_name;

    修改表:

    充实字段:

    mysql> ALTER TABLE table_name ADD field_name field_type;

    修改原字段名称及项目:

    mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;

    去除字段:

    mysql> ALTER TABLE table_name DROP field_name;

     

     

     

     

     

     

    MySql表结构修改详解

    修改表的语法

    增加列[add 列名]

    ①alter table 表名 add 列名 列类型 列参数【加的列在表的末段面】
    例:alter table test add username char(20) not null default '';
    alter table test add birth date not null default '0000-00-00';

    ②alter table 表名 add 列名 列类型 列参数 after 某列【把新列加在某列后边】
    例:alter table test add gender char(1) not null default '' after username;

    ③alter table 表名 add 列名 列类型 列参数 first【把新列加在最终边】
    例:alter table test add pid int not null default 0 first;

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

    删除列[drop 列名]

    ①alter table 表名 drop 列名
    例:alter table test drop pid;

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

    修改列[modife 列名]

    ①alter table 表名 modify 列名 新品类 新参数【修改列类型】
    例:alter table test modify gender char(4) not null default '';
    ②alter table 表名 change 旧列名 新列名 新类型 新参数【修改列名和列类型】
    例:alter table test change pid uid int unsigned not null default 0;

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

    查询列

    ①desc 表名【查询全体列】
    例: desc test;
    mysql> desc department;
    ------- ------------- ------ ----- --------- -------
    | Field | Type | Null | Key | Default | Extra |
    ------- ------------- ------ ----- --------- -------
    | dId | int(11) | NO | PRI | | |
    | dName | varchar(32) | YES | | NULL | |
    ------- ------------- ------ ----- --------- -------

    ②show columns from 表名【效果和desc一样】
    mysql> show columns from department;
    ------- ------------- ------ ----- --------- -------
    | Field | Type | Null | Key | Default | Extra |
    ------- ------------- ------ ----- --------- -------
    | dId | int(11) | NO | PRI | | |
    | dName | varchar(32) | YES | | NULL | |
    ------- ------------- ------ ----- --------- -------

    ③show create table 表名【查看表的创导代码】
    mysql> show create table department;
    CREATE TABLE `department` (
    `dId` int(11) NOT NULL,
    `dName` varchar(32) DEFAULT NULL,
    PRIMARY KEY (`dId`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

     

    小结一下对mysql表结构的改换操作,包蕴对字段及索引的修改操作: 增多字段: alter table `user_movement_log` Add column GatewayId int not null default 0 AFTER `Regionid` (在哪些字段前边增多) 删除字段: alter table `user_movement_log` drop column Gatewayid 调节字段顺序: ALTE纳瓦拉 TABLE `user_movement_log` CHANGE `GatewayId` `GatewayId` int not null default 0 AFTER RegionID //主键 alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id); //扩展三个新列 alter table t2 add new田野先生 timestamp; (轻松语法,只内定新增字段new田野同志 类型为timestamp) alter table infos add new田野 tinyint not null default '0'; (同一时间钦点字段null属性、暗中认可值) //删除列 alter table t2 drop column c; (删除列c) //重命名列 alter table t1 change a b integer; (把列a改名叫b,注意要钦命列类型) //改换列的品类 alter table t1 change b b bigint not null; (把列a改名称为b,钦定列类型及null属性) alter table infos change list list tinyint not null default '0'; //重命名表 alter table t1 rename t2; 加索引 mysql> alter table tablename change depno depno int(5) not null; mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]); mysql> alter table tablename add index emp_name (name); 加主关键字的索引 mysql> alter table tablename add primary key(id); 加唯意气风发限制条件的索引 mysql> alter table tablename add unique emp_name2(cardnumber); 删除某些索引 mysql>alter table tablename drop index emp_name; 修改表: 扩大字段: mysql> ALTER TABLE table_name ADD field_name field_type; 修改原字段名称及项目: mysql> ALTEEscort TABLE table_name CHANGE old_field_name new_field_name field_type; 删除字段: mysql> ALTE奥迪Q7 TABLE table_name DROP field_name;

     

    ORDER BY _column1, _column2; /* _column1升序,_column2升序 */ 
    ORDER BY _column1, _column2 DESC; /* _column1升序,_column2降序 */ 
    ORDER BY _column1 DESC, _column2 ; /* _column1降序,_column2升序 */ 
    ORDER BY _column1 DESC, _column2 DESC; /* _column1降序,_column2降序 */ 
    用 DESC 表示按倒序排序(即:从大到小排序)
    用 ACS 表示按正序排序(即:从小到大排序)

     

    order应该是以汉字的 ASCII 码排序,上边是依照汉字拼音排序
    select * from corp_data where Chengshi like "图木舒克" order by convert(name using gbk);

    #select count(*) as count from corp_data where Chengshi like "图木舒克";
    select * from corp_data where Chengshi like "图木舒克" order by convert(name using gbk);
    #delete from corp_data where Chengshi like "图木舒克";
    #desc corp_data;
    #alter table corp_data modify column hangye varchar(100) ;
    #alter table corp_data modify column jianjie varchar(10000) ;

     

     

     

     

     

    mysql怎么着询问最新的5条数据
    select * from tb_content where id=(select msx(id) from tb_content) limit 0,5;

    jdbcTemplate.execute("CREATE
    建数据库不适当,要手动drop database ,再create database.

    查总数:
    select count(*) as count from tb_content;
    select count(id) as count from tb_content;
    navicat->剖判表->获得表的总额

    select * from corp_data where Chengshi like "上海";
    select * from corp_data where Shengzhixiashi like "河南";

    select name ,count(distinct(url)) from corp_data group by  name;
    select Chengshi ,count(distinct(url)) from corp_data group by  Chengshi;
    select Chengshi ,count(*) from corp_data group by  Chengshi;
    select count(*) from corp_data where Chengshi like "北京";
    select * from corp_data where Chengshi like "北京";
    select name ,url  from corp_新葡亰496net,data limit 1;
    select *  from corp_data limit 1;

    select *  from corp_data limit 10;

    select count(*) as count from corp_data limit 10;
    select count(distinct(name)) as count from corp_data;

     varchar(N),  这里的N是指字符数,并非字节数.占用的字节数与编码有关
    utf-8, 六当中国字3字节 意国语字母1字节 

     

    使用root账户进入mysql
    create user 'test'@'localhost' indentified by '123456';
    grant all privileges on *.* to 'test'@'localhost' identified by '123456';

    grant all privileges on *.* to 'test'@'%' identified by '123456';   #在其他任性台计算机上访谈

    flush privileges;

    mysql编码最佳应用utf-8,导出导入不用考滤编码。
    GB2312是GBK的子集,GBK是GB18030的子集,是国家标准。utf-8为国际规范,特殊汉语时使用gb18030。

     

    本文由新葡亰496net发布于网络数据库,转载请注明出处:新葡亰496net:mysql的多少个知识点,数据库优化学

    关键词:

上一篇:没有了

下一篇:没有了