哔哔大数据

说明什么是Mycat一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQLServer结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品一个新颖的数据库中间件产品官网:http://www.mycat.org.cn/开源地址:https://github.com/MyCATApache/Mycat-Server相关版本配置说明软件版本MycatMycat-server-1.6.7.5MySQL5.7下载Mycat解压到任意目录配置文件说明进入Mycat的conf/目录下,主要注意这3个配置文件schema.xml:中定义逻辑库,表、分片节点等内容rule.xml:中定义分片规则;server.xml:中定义用户以及系统相关变量,如端口等配置schema.xml文件官方文件里注释太多,太杂,看着太费劲,可以先进行删减该配置说明:逻辑库名TESTDB,相当于一个数据库,逻辑表名table,相当于数据库里的一张表,这张表里的数据放在了dn1,dn2,dn3,dn4这个四个真实的数据库里。<?xmlversion="1.0"?><!DOCTYPEmycat:schemaSYSTEM"schema.dtd"><mycat:schemaxmlns:mycat="http://io.mycat/"><!--name逻辑数据名称取消sql限制,把sqlMaxLimit="-1"--><schemaname="TESTDB"checkSQLschema="false"sqlMaxLimit="100"><!--name:逻辑表名称dataNode:逻辑表数据存放的节点rule:逻辑表的分片规则规则对应rule.xml里面--><tablename="sbtest1"dataNode="dn1,dn2,dn3,dn4"rule="rule1"/><!--逻辑表可以配置多个--></schema><!--数据节点对应的数据库,这里都配置在一个机器上,可分布式配置--><dataNodename="dn1"dataHost="localhost"database="db1"/><dataNodename="dn2"dataHost="localhost"database="db2"/><dataNodename="dn3"dataHost="localhost"database="db3"/><dataNodename="dn4"dataHost="localhost"database="db4"/><!--数据的节点的链接信息,name需要对应上<dataNode/>标签里的dataHost--><dataHostname="localhost"maxCon="1000"minCon="10"balance="0"writeType="0"dbType="mysql"dbDriver="native"switchType="1"slaveThreshold="100"><!--心跳语句--><heartbeat>selectuser()</heartbeat><!--配置写入主机--><writeHosthost="hostM1"url="localhost:3306"user="root"password="123456"></writeHost></dataHost></mycat:schema>配置server.xml文件该文件可以不用配置配置rule.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmycat:ruleSYSTEM"rule.dtd"><mycat:rulexmlns:mycat="http://io.mycat/"><!--分片规则名称--><tableRulename="rule1"><rule><!--分片字段--><columns>id</columns><!--分片的方法--><algorithm>mod-long</algorithm></rule></tableRule><functionname="mod-long"class="io.mycat.route.function.PartitionByMod"><!--分片的节点数量--><propertyname="count">4</property></function></mycat:rule>MySQL创库创表创建真实库创建真实表启动Mycat进入Mycat注意在Linux下,如果进入MySQL需要端口,一定要加上host,不然指定的端口不会生效。mysql-uroot-h127.0.0.1-P8066-p插入数据在插入数据时,分片规则字段数据尽量不要太接近,不然看不出效果。

哔哔大数据

相关配置版本组件版本Hadoop2.9.2Jdk1.8.0_221CentOS7.7Sqoop2.6.0MySQL5.7.30MySQL驱动5.1.48Sqoop说明把Sqoop当作一个工具就好,它的主要作用就是把传统数据库的数据与大数据存储互导数据。MySQL<->HDFSMySQL<->Hive使用SQL作为导入条件等安装MySQL#没有wget,则执行这个yuminstallwget#下载MySQL5.7wgethttp://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm#安装rpm包yum-yinstallmysql57-community-release-el7-10.noarch.rpm#通过Yum来安装MySQL,会自动处理MySQL与其他组件的依赖关系yuminstallmysql-community-server#启动MySQLsystemctlstartmysqld.service#查看密码greppassword/var/log/mysqld.log修改MySQL密码原本密码强度需要大小写母特殊字符数字,最少8位,我们把密码改简单一点#首先进入MySQLmysql-uroot-p#查看密码策略SHOWVARIABLESLIKE"%password%";#修改密码长度策略为5就是密码长度最短5位SETGLOBALvalidate_password_length=5;#修改密码强度策略0就不需要大小写字母和符号SETGLOBALvalidate_password_policy=0;#修改密码SETPASSWORD=PASSWORD("123456");复制驱动把MySQL驱动复制到Sqoop的lib/目录下。cpmysql-connector-java-5.1.38-bin.jar/usr/local/src/sqoop-1.4.7/lib/测试是否连接成功通过Sqoop查看MySQL数据库。sqooplist-databases\--connectjdbc:mysql://127.0.0.1:3306\--username'root'\--password'123456'MySQL—>HDFS首先需要在MySQL建好需要导出的表,以及添加好内容#创建test数据库craetedatabasetest;#创建stab表createtablestab(idint,namevarchar(20));#插入stab表数据insertintostab(id,name)values(1,"big"),(2,"data"),(3,"boy");使用Sqoop导出,命令关键字import(导入)sqoopimport\--connect'jdbc:mysql://127.0.0.1:3306/test'\--table'stab'\--username'root'\--password'123456'\--target-dir'/sqoop/stab'\--fields-terminated-by'|'\--split-byid某些参数含义—connect:MySQL数据库地址—table:需要导出表的表名—target-dir:表导出的HDFS地址—fields-terminated-by:设置导出数据字符分隔符—split-byid:HDFS上数据的分区规则(最好该字段是int类型,默认为主键),上命令,表示安装id字段分区,如果不分区,就把--split-byid替换成-m1即可-m:表明需要使用几个map任务并发执行如果设置为2,则表示:第一个map执行拆分字段值为(1,25)之间的数据,处理结果会在一个分区第二个map执行拆分字段值为(26,50)之间的数据,处理结果会在另一个分区HDFS—>MySQLSqoop不能创建表,所以需要实现把表创建完成。清空test数据库里stab表的数据,命令关键字export(导出)truncatetabletest.stab;使用Sqoop从HDFS导入到MySQLsqoopexport\--connect'jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8'\--username'root'\--password'123456'\--table'stab'\--export-dir'/sqoop/stab'\--fields-terminated-by'|'\-m1

2020-6-4 1084 0
未分类

Zookeeper正常部署Zookeeper集群的正常部署并启动解压&配置环境变量[root@mastersrc]#tar-zxvfzookeeper-3.4.5.tar.gz[root@mastersrc]#pwd/usr/local/src#追加到环境变量[root@masterzookeeper]#vi~/.bash_profile#zookeeperexportZK_HOME=/usr/local/src/zookeeper-3.4.5exportPATH=$PATH:$ZK_HOME/bin:[root@mastersrc]#source~/.bash_profile修改zoo.cfg文件进入到ZooKeeper的conf/目录下#拷贝zoo_sample.cfg并重命名为zoo.cfg[root@masterconf]#cpzoo_sample.cfgzoo.cfg打开zoo.cfg文件#第一处修改这个路径需要自己创建好#examplesakes.dataDir=/usr/local/src/zookeeper-3.4.5/DataZk#在最后添加,指定myid集群主机及端口,机器数必须为奇数server.1=192.168.176.48:2888:3888server.2=192.168.176.49:2888:3888server.3=192.168.176.50:2888:3888修改myid添加Zookeeper用于识别当前机器的ID#进入创建的DataZk目录[root@masterDataZk]#echo1>myid[root@masterDataZk]#catmyid1#myid文件中为1,即表示当前机器为在zoo.cfg中指定的server.1分发配置[root@mastersrc]scp-r/usr/local/src/zookeeper-3.4.5/root@slave1:/usr/local/src/[root@mastersrc]scp-r/usr/local/src/zookeeper-3.4.5/root@slave2:/usr/local/src/修改其他机器的myid文件#在slave1上root@slave1src]#echo2>/usr/local/src/zookeeper/DataZk/myid#在slave2上root@slave2src]#echo3>/usr/local/src/zookeeper/DataZk/myid启动Zookeeper集群在Zookeeper的bin/目录下启动#分别在master、slave1、slave2执行./zkServer.shstart[root@masterbin]#./zkServer.shstartJMXenabledbydefaultUsingconfig:/usr/local/src/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfgStartingzookeeper...STARTED查看状态只有其中一个是leader,其他的都是follower#master查看状态[root@masterbin]#./zkServer.shstatusJMXenabledbydefaultUsingconfig:/usr/local/src/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfgMode:leader#slave1查看状态[root@slave1bin]#./zkServer.shstatusJMXenabledbydefaultUsingconfig:/usr/local/src/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfgMode:follower#slave2查看状态[root@slave2bin]#zkServer.shstatusJMXenabledbydefaultUsingconfig:/usr/local/src/zookeeper/zookeeper-3.4.5/bin/../conf/zoo.cfgMode:followerHadoop正常部署Hadoop集群的正常部署并启动Hbase安装配置解压&配置环境[root@node1src]#tar-zxvfhbase-1.2.0-bin.tar.gz-C/usr/local/src[root@node1soft]#vim/etc/profile追加上#HbaseexportHBASE_HOME=/usr/local/src/hbase-1.2.0exportPATH=$PATH:$HBASE_HOME/bin:[root@node1hbase-1.2.0]#source/etc/profile修改配置文件hbase-env.sh修改#第一处#Thejavaimplementationtouse.Java1.7+required.exportJAVA_HOME=/usr/local/src/jdk1.8.0_221#第二处改为false,禁用HBase自带的Zookeeper。#TellHBasewhetheritshouldmanageit'sowninstanceofZookeeperornot.exportHBASE_MANAGES_ZK=falsehbase-site.xml修改<!--HBase数据存储的位置--><property><name>hbase.rootdir</name><value>hdfs://node1:9000/HBase</value></property><!--true开启集群模式--><property><name>hbase.cluster.distributed</name><value>true</value></property><!--0.98后的新变动,之前版本没有.port,默认端口为60000--><property><name>hbase.master.port</name><value>16000</value></property><!--zookeeper地址--><property><name>hbase.zookeeper.quorum</name><value>node1,node2,node3</value></property><!--ZooKeeper的zoo.conf中的配置。快照的存储位置--><property><name>hbase.zookeeper.property.dataDir</name><value>/usr/local/src/zookeeper-3.4.5/dataDir</value></property>regionservers修改指定运行regionservers进程的机器。修改conf/下的regionservers文件,删除原本的localhost,加上其他节点名称。node1node2node2软连接hadoop配置文件到HBase#hadoop的core-site.xml&hdfs-site.xml文件[root@node1conf]#ln-s/usr/local/src/hadoop-2.6.0/etc/hadoop/core-site.xml/usr/local/src/hbase-1.2.0/conf/core-site.xml[root@node1conf]#ln-s/usr/local/src/hadoop-2.6.0/etc/hadoop/hdfs-site.xml/usr/local/src/hbase-1.2.0/conf/hdfs-site.xml分发配置#分发配置[root@node1conf]#foriin{2..3};doscp-r/usr/local/src/hbase-1.2.0root@node${i}:/usr/local/src/;done#分发环境变量[root@node1conf]#foriin{2..3};doscproot@node${i}:/etc/profile;done#记得去其他机器source/etc/profile启动一步一步的启动#首先启动Master[root@node1conf]hbase-daemon.shstartmaster#然后每台机器启动regionserver[root@node1conf]hbase-daemon.shstartregionserver提示:如果集群之间的节点时间不同步,会导致regionserver无法启动,抛出方案一:同步时间服务//同步为北京时间[root@node1conf]yuminstallntpdate[root@node1conf]ntpdate-untp.api.bz[root@node1conf]ntpdatentp1.aliyun.com//查看时间[root@node1conf]date方案二:属性hbase.master.maxclockskew设置更大的值<property><name>hbase.master.maxclockskew</name><value>180000</value><description>Timedifferenceofregionserverfrommaster</description></property>一键启动&关闭#启动[root@node1conf]start-hbase.sh#关闭[root@node1conf]start-hbase.shstoppinghbase...............验证HbaseWEBUI界面:http://192.168.176.84:16010启动备用节点Hbase在设计之初就考虑到了高可用,所以能非常方便的使用只需要在任意一台机器再启动一个master,那这台机器就自动变成Hbase备用Master。#在node2启动一个master[root@node2conf]#hbase-daemon.shstartmaster

未分类

HBase定义HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。HBase数据模型逻辑上,HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个multi-dimensionalmap。HBase逻辑结构HBase物理存储结构数据模型0x01NameSpace命名空间,类似于关系型数据库的DatabBase概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是hbase和default,hbase中存放的是HBase内置的表,0x02Region类似于关系型数据库的表概念。不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往HBase写入数据时,字段可以动态、按需指定。因此,和关0x03RowHBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照RowKey的字典顺序存储的,并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重0x04ColumnHBase中的每个列都由ColumnFamily(列族)和ColumnQualifier(列限定符)进行限定,例如info:name,info:age。建表时,只需指明列族,而列限定符无需预先定义。0x05TimeStamp用于标识数据的不同版本(version),每条数据写入时,如果不指定时间戳,系统会0x06Cell由{rowkey,columnFamily:columnQualifier,timeStamp}唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。HBase基本架构HBase内置Zookeeper,所以是自带高可用,但是实际操作,不会用内置的Zookeeper架构角色RegionServerRegionServer为Region的管理者其实现类为HRegionServer主要作用如下:对于数据的操作:get,put,delete;对于Region的操作:splitRegion、compactRegion。`MasterMaster是所有RegionServer的管理者其实现类为HMaster主要作用如下:对于表的操作:create,delete,alter对于RegionServer的操作:分配regions到每个RegionServer,监控每个RegionServer的状态,负载均衡和故障转移。ZookeeperHBase通过Zookeeper来做Master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。HDFSHDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用的支持。

2020-4-15 863 0
未分类

概述spark-submit可以提交任务到spark集群执行,也可以提交到hadoop的yarn集群执行。最简单提交命令本地模式提交spark-submit\--class类名jar包参数不同搭建的提交方式主要模板spark-submit\--class主类\--master提交地址\--deploy-mode提交方式\其他参数\运行主程序程序参数自生调度器管理俗称的集群模式,一个master,多个worker,这时是Spark自身的资源调度器管理。spark-submit\--class主类\--masterspark://master:6066\--deploy-modecluster\其他参数\运行主程序程序参数提交到Yarn管理spark-submit\--class主类\--masterspark://master:6066\--deploy-modeyarn\其他参数\运行主程序程序参数参数详解--class:执行主类,Python不需要--master:提交的地址:spark://master:6066、yarn、local--deploy-mode:默认cliebt,cluster--name:程序名--driver-memory:driver内存,默认为1G--driver-cores:driverCPU数,默认1核。--executor-memory:每个executor的内存,默认是1G--executor-core:每个executor的核数。在yarn或者standalone下使用--total-executor-cores:所有executor总共的核数。仅仅在mesos或者standalone下使用--num-executors:启动的executor数量。默认为2。在yarn下使用Spark集群例子如果有些内存核心不指定,就不能很好的利用集群的算力spark-submit\--masterspark://node1:6066\--deploy-modecluster\--driver-memory14g\--driver-cores8\--executor-memory14g\--executor-cores4\--total-executor-cores24\--classtwo/root/jar/bigdataboy.jarobs://bigdata/bigdataboyYarn提交例子spark-submit\--masteryarn\--deploy-modecluster\--driver-cores5\--driver-memory10g\--executor-memory25g\--executor-cores4\--class类名Jar包参数全部参数--master提交地址spark://host:port,mesos://host:port,yarn,k8s://https://host:port,默认:local[*]--deploy-mode提交模式默认:client(单机),cluster(集群)--class程序主类Java&Scala程序--name程序名字application的名字--jarsJARS程序使用的Jar包路径,用逗号分割--packagesmaven的Jar包名称需要与--repositories一起使用--repositories需要与--package一使用(--packagesmysql:mysql-connector-java:5.1.27--repositorieshttp://maven.aliyun.com/nexus/content/groups/public/)--exclude-packages为了避免冲突而指定不包含的package--py-filesPython程序的路径支持者.zip,.egg,or.py压缩文件或者文件--filesFILESComma-separatedlistoffilestobeplacedintheworkingdirectoryofeachexecutor.FilepathsofthesefilesinexecutorscanbeaccessedviaSparkFiles.get(fileName).--confPROP=VALUE额外的配置--properties-fileFILE加载配置路径,默认conf/spark-defaults.conf.--driver-memoryMEMMemoryfordriver(e.g.1000M,2G)(Default:1024M).--driver-java-options传递给driver的额外Java选项。--driver-library-path传递给driver的额外库路径项。--driver-class-pathdriver的类路径,用--jars添加的jar包会自动包含在类路径里--executor-memoryMEMMemoryperexecutor(e.g.1000M,2G)(Default:1G).--help,-h显示此帮助消息并退出。--verbose,-v打印额外的调试输出。--version,打印当前Spark的版本仅支持Cluster部署模式:--driver-coresNUMdriver使用的核心数,仅在集群模式下使用(Default:1).仅支持standalone、Mesos的集群部署模式:--supervise如果给定,则在失败时重新启动驱动程序。--killSUBMISSION_ID如果给定,则杀死指定的驱动程序。--statusSUBMISSION_ID如果给定,请求指定的驱动程序的状态。仅支持standaloneandMesos部署模式:--total-executor-coresNUM所有executors的核心总数。仅支持standaloneandYARN部署模式:--executor-coresNUM每个executors的核心数。(Default:1inYARNmode,或者standalone模式worker的所有核数。)仅支持YARN部署模式:--queueQUEUE_NAMEYarn提交的对列名称(Default:"default").--num-executorsNUMexecutors启动的数量(Default:2).--archivesARCHIVESCommaseparatedlistofarchivestobeextractedintotheworkingdirectoryofeachexecutor.--principalPRINCIPALPrincipaltobeusedtologintoKDC,whilerunningonsecureHDFS.--keytabKEYTABThefullpathtothefilethatcontainsthekeytabfortheprincipalspecifiedabove.ThiskeytabwillbecopiedtothenoderunningtheApplicationMasterviatheSecureDistributedCache,forrenewingtheloginticketsandthedelegationtokensperiodically.

2020-3-26 1365 0
未分类

空字段赋值函数说明为了给字段中为null的值赋予一个新值。nal(字段1,字段2|所赋值)有两种用法用法一:只传入一个字段#原数据hive>select*fromstudentinof;OK1bidataboy10002BoyNULL3AaNULL4Boy2004Tab1000Timetaken:1.13seconds,Fetched:5row(s)把为null的赋值成0hive>selectname,nvl(money,0)fromstudentinof;OKbidataboy1000Boy0Aa0Boy200Tab1000Timetaken:0.383seconds,Fetched:5row(s)用法二:传入两个字段作用:当字段1为null时,字段2补充,当字段2的值为null,赋予值补充。#原数据hive>select*fromstudentinof;OK1bidataboy10002BoyNULL3AaNULL4Boy2005Tab10006NULL2000Timetaken:0.333seconds,Fetched:6row(s)#传入两个字段:当money为null时,返回name的值。hive>selectname,nvl(money,name)fromstudentinof;OKbidataboy1000BoyBoyAaAaBoy200Tab1000NULL2000Timetaken:1.75seconds,Fetched:6row(s)case匹配这个case匹配跟MySQL里的是差不多的。case变量或者字段when待匹配值then值或表达式when待匹配值then值或表达式else未匹配的处理end使用统计不同部门的男女数部门|男|女数据hive>select*fromemp;OK小黄A女小蓝B女小粉A女小红B男小黑A男小紫B男Timetaken:1.111seconds,Fetched:6row(s)HQL查询语句selectdept_id,sum(casesexwhen"男"then1else0end)male_count,sum(casesexwhen"女"then1else0end)female_countfromempgroupbydept_id;结果TotalMapReduceCPUTimeSpent:11seconds90msecOKA12B21Timetaken:343.221seconds,Fetched:2row(s)行转列相关函数concat(col,col,...):字符串的拼接,跟MySQL里面的一样。concat_ws(separator,str1,str2,...):这个是特殊的拼接,第一个参数是分隔符,也可以传入数组,返回一个能指定分隔符的字符串。COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。使用原数据hive>select*fromemp;OK小黄A女小蓝B女小粉A女小红B男小黑A男小紫B男Timetaken:1.048seconds,Fetched:6row(s)HQL语句selectt.ds,concat_ws("|",collect_set(t.n))from(selectconcat_ws("|",dept_id,sex)ds,namenfromemp)tgroupbyt.ds;结果TotalMapReduceCPUTimeSpent:8seconds40msecOKA|女小黄|小粉A|男小黑B|女小蓝B|男小红|小紫Timetaken:54.446seconds,Fetched:4row(s)#可以把最外层的select里的concat_ws()函数去掉,结果变成如下。TotalMapReduceCPUTimeSpent:7seconds500msecOKA|女["小黄","小粉"]A|男["小黑"]B|女["小蓝"]B|男["小红","小紫"]Timetaken:71.575seconds,Fetched:4row(s)列转行效果实例#转换之前movie|category|------------------------------------《疑犯追踪》|悬疑,动作,科幻,剧情|#转换之后movie|category|------------------------------------《疑犯追踪》|悬疑|《疑犯追踪》|动作|《疑犯追踪》|科幻|《疑犯追踪》|剧情|函数说明:explode(col):将hive一列中复杂的array或者map结构拆分成多行。lateralview:用法:lateralviewudtf(expression)tablealiasascolumnalias解释:用于和split,explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。使用原数据《Lietome》悬疑,警匪,动作,心理,剧情《战狼2》战争,动作,灾难创表createtablemovie_info(moviestring,categoryarray<string>)rowformatdelimitedfieldsterminatedby"\t"collectionitemsterminatedby",";查询语句selectmovie,category_namefrommovie_infolateralviewexplode(category)table_tmpascategory_name;结果不跑MROK《Lietome》悬疑《Lietome》警匪《Lietome》动作《Lietome》心理《Lietome》剧情《战狼2》战争《战狼2》动作《战狼2》灾难Timetaken:0.438seconds,Fetched:8row(s)

2020-3-10 976 0
未分类

概述SQL字段的约束是保证字段内容符合要求的一种方法,有六大约束,MySQL只支持其中五种,还有一种语法不报错,但没有实际的作用。六大约束primarykey(主键):唯一,不能为空。notnull(非空):不能为空。default(默认值):字段默认值。unique(唯一):唯一,能为空。foreignkey(外键):为了使两张表的数据更好的关联。check(内容检查MySQL不支持):检查内容是否要求。使用本质是两种不同的写法,效果没有区别列级约束createtablestuinfo.sinfo(idintprimarykey,#主键namevarchar(20)notnull,#不能为空sexenum("男","女")default"女",#检查&默认值stuidintunique,#唯一值skilltypeintreferencesstype(id)#外键)#类型表用以外键关联createtablestuinfo.stype(idint,skillvarchar(255)notnull)表级约束在表级约束中,不能设置notnull、default关键字constraint是可以省略的createtablestuinfo.sinfo(idint,namevarchar(20)notnull,sexenum("男","女"),stuidint,skilltypeint,#constraint别名约束constraintid_pkprimarykey(id),#主键constraintsec_ckcheck(sexin("男","女")),#检查点constraintstuid_ununique(stuid),#唯一键constraintst_fkforeignkey(skilltype)referencesstype(id)#外键)#类型表createtablestuinfo.stype(idint,skillvarchar(255)notnull)主键和唯一关键字唯一性是否允许为空一个表中是否能有多个是否允许组合primarykey√××√(不推荐)unique√√√√(不推荐)设置字段约束组合需要表级约束。createtablestuinfo.sinfo(idint,namevarchar(20)notnull,sexenum("男","女"),/*组合主键两个字段组成唯一性*/id_pkprimarykey(id,name),)字段约束的修改添加字段时加上约束altertable表名modifycolumn字段名约束;修改约束当新旧字段名一样时,就是修改类型、约束。altertable表名changecolumn旧字段名新字段名约束;

2020-3-8 1031 0
2020-3-7 1036 0
2020-3-7 1116 0